Все началось с того, что управляющая компания в нашем поселке обанкротилась. Работать она перестала, и инфраструктура постепенно начала приходить в запустение — въездную группу вместе со шлагбаумами продали на торгах, мусор перестали вывозить, фонари постепенно начали выходить из строя и по ночам улицы погружались в темноту. Соседи собрались, провели общее собрание и основали ТСН — товарищество собственников недвижимости. С этого момента мы оказались в ситуации, когда управлять поселком нужно самостоятельно, а многие вещи приходится осваивать с нуля.

Общий вид нового въезда в поселок
Общий вид нового въезда в поселок

Организовать площадку для сбора мусора или наладить работу КПП со шлагбаумами — задачи, с которыми средний человек вряд ли столкнется. Но нам такая возможность выпала, ведь жизнь поселка надо было как-то налаживать, а кроме нас самих это никому не было нужно.

Я же всегда любил сооружать нехитрые системы автоматизации «на коленке» — умный дом, различные контроллеры, интеграции. И произошедшее воспринял как шанс попробовать себя в более масштабных DIY-проектах, полезных для общества. В этой статье постараюсь изложить полученный опыт, который может пригодиться не только жителям поселков, но и многоквартирных домов, где жизнь устроена во многом похоже. Весь код, использованный в этом проекте, выложен в свободный доступ.

Контроль въезда на территорию

В большинстве поселков и СНТ въезд ограничен, в том или ином виде. На въезде стоят ворота или шлагбаум, которые открывают жители самостоятельно, либо рядом еще дежурит охранник. Заманчиво было полностью все автоматизировать, но решили, что без охранника первое время мы точно не обойдемся: кто-то должен быть на месте на случай поломки оборудования, отключения электричества или просто объяснять людям, как что работает. Таким образом, задача разделилась на две: как жителям самим открывать шлагбаум и как работать охраннику.

Самостоятельное открытие

Популярные варианты управления шлагбаумом.
Пульты от шлагбаумов Nice
Пульты от шлагбаумов Nice
RFID-считыватели дальнего действия
RFID-считыватели дальнего действия
  1. Радио пульт. Распространенная история: закупается куча пультов (в нашем случае нужно было 1000 шт., каждый по 1000 руб., итого миллион рублей на пульты) и раздается жителям. У пультов очень ограниченный радиус действия (чтобы открыть гостям, нужно самому приехать к шлагбауму), у них садятся батарейки, некоторые модели можно скопировать. Весь процесс работы с пультами бесконтрольный и не поддается никакому учету, потому что приемники не поддерживают никакой внешней интеграции (нельзя удаленно добавить пульт, удалить пульт, сделать временный пульт, зафиксировать событие открытия и с какого пульта оно было сделано).

  2. Различные физические ключи: некоторые необходимо прикладывать к считывателю, некоторые умеют считываться на расстоянии. Механизм похож на радио пульты, но гораздо дешевле, от 20 рублей за ключ. Также их гораздо легче администрировать: можно за пару секунд добавить ключ, сидя дома за компьютером, есть считыватели с возможностью управления по локальной сети. Основной минус – пользователю нужно каждый раз открывать окно и прикладывать ключ к считывателю. Есть варианты, работающие на расстоянии, но для их стабильной работы ключ должен быть верно расположен внутри машины (в современных автомобилях стекло может плохо пропускать радио сигнал и для расположения транспондера на нем выделяется специальное место). Подобные считыватели используются в соседнем с нами поселке и их опыт показывает, что это неудобно, хоть в теории и звучит неплохо. Также этот способ не позволяет пропускать гостей.

  3. Звонок по номеру телефона. Крайне распространенный вариант: есть номер телефона, известный всем жителям или даже написанный на въезде, а к шлагбауму подключено GSM-реле с симкой, на котором также хранится список номеров жителей. Житель звонит, его номер распознается и находится в списке, шлагбаум открывается. Метод отличный, если его правильно организовать: житель сможет открыть въезд и себе и гостям. Подвид данного варианта это открытие через приложение: пользователь получает логин и пароль от приложения, заходит в него и получает в нем кнопку «Открыть шлагбаум». Работает моментально, тогда как звонок занимает секунд 10-20. Стоимость реле около 5 тысяч рублей, это самый дешевый способ. Также есть небольшая ежемесячная плата за сим-карту либо в случае с приложением – плата за приложение.

  4. Распознавание автомобильных номеров. Самый современный вариант. На въезде висит камера, видео с нее обрабатывает программа и при распознавании номера производит поиск по списку разрешенных номеров. Если номер найден – передает команду на реле, подключенное к шлагбауму. Номер автомобиля всегда к нему прикреплен, у него не сядет батарейка, он не потеряется (хочется верить, по крайней мере). Его вряд ли кто-то станет копировать и передавать третьим лицам. Минусов у метода мало, но они есть. Номер может быть покрыт грязью или снегом, тогда его придется почистить перед въездом. Номера других стран считывают не все системы распознавания. Также этот вариант дороже остальных.

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

Не буду рекламировать используемую нами систему, скажу только, что все перечисленное она делать умеет: дает пользователям редактировать свои номера телефонов и автомобилей, по кнопке открывать шлагбаум, а также предоставляет номер телефона, при звонке на который открывается шлагбаум. Все это делается через недорогое (2000 руб) Ethernet-реле, подключенное к шлагбауму и к интернету. Также эта система дает возможность выгружать все данные пользователей по REST API , что открывает возможности для интеграции.

Интерфейс приложения для жителей поселка
Интерфейс приложения для жителей поселка

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

Итого сейчас все работает так:

  • при распознавании номера автомобиля, отправляется запрос в систему и она, если номер есть в базе, сама дает команду реле открыть шлагбаум

  • при звонке на их номер телефона, она также сама проверяет, есть ли такой телефон в базе. Если номер есть, шлагбаум открывается. Если номера нет, то проигрывается уведомление об этом.

    Домофон на стойке у въезда
    Домофон на стойке у въезда

Дополнительно к этому, на въезде поставили умный домофон. Зачем? Потому что можем. По информации от производителя, это была первая установка такого домофона у шлагбаума, обычно их используют на подъездах. На домофоне можно набрать номер дома -- и у жителя зазвонит телефон, при условии что на нем установлено приложение домофона. Домофон может быть единственной системой пропуска через шлагбаум, он достаточно удобен в использовании и не слишком дорог (25 т. р.), общее впечатление от него положительное.

Работа охраны

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

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

Во-первых, номер телефона становится многим известен, а у охранника нет технической возможности проверить, житель звонит или кто-то посторонний. Во-вторых, охранник очень склонен пропускать всех подряд. Представьте себя на его месте: приехала машина и водитель настойчиво просит его пропустить. Можно с ним спорить, рассказывать о правилах проезда, что ему нужно зарегистрироваться в системе и там пропуск сделать, а можно просто...пропустить. И об этом никто не узнает и за это ничего не будет. Ответственный сотрудник, конечно, так делать не станет, но на практике с небольшим упорством можно убедить открыть проезд абсолютное большинство охранников. Осложняется ситуация тем, что охранники работают вахтовым способом: приезжают на некоторый срок (обычно 2 недели или месяц), живут на месте и работают посменно. Получается, каждые 2 недели новые охранники, и если даже какую-то смену удается обучить и заставить работать, то вскоре их меняют другие и все начинается заново.

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

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

Телефон

Первым пришло на ум решение: загрузить в телефон список контактов и сказать охране: "Всем, чей номер не определился, говорить зарегистрировать свой номер и дальнейших разговоров не вести". Затея полностью провалилась, разумеется, следить за тем, определился номер или нет, всем было лень. Попробовали ограничить звонки с неизвестных номеров, оказалось что сделать это не так-то просто, удалось только при помощи стороннего приложения. Но возникла другая проблема: тем, кто не в списке (а это были и некоторые жители), программа просто сбрасывала звонок, и пользователю не было очевидно, что произошло. Посыпались жалобы, что телефон не работает. Обновления списка контактов приходилось делать вручную через Google контакты, позже написал скрипт для автоматического обновления, но все равно была задержка: с только что добавленного номера телефона не получалось дозвониться, что прибавляло претензий к нашей работе.

Отдельная проблема это мессенджеры: в них нельзя ограничить круг людей, которые могут вам позвонить/написать первыми (в tg есть настройка "Контакты и Premium-подписчики", но этого тоже мало). Возможность полностью заблокировать пользователей не из списка контактов появилась только в Max.Также проблемой было поведение охранников: то авиа режим включат, то что-то установят нехорошее. У сотрудников в возрасте были проблемы в целом с управлением смартфоном.

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

Телефон и планшет на рабочем месте охранника
Телефон и планшет на рабочем месте охранника

Планшет

Поначалу на посту охраны стоял ноутбук, но за полгода он пришел в безобразное состояние от сигаретных смол и дорожной пыли, стало понятно, что долго он там не протянет. Так родилось решение, которое используется и сейчас. Был куплен самый дешевый планшет, установлен в держатель и воткнут в зарядку. На планшете открыт браузер, в браузере -- веб-интерфейс, созданный за пару вечеров. По мере использования, интерфейс сильно изменился, стало понятно что он должен быть упрощен до предела: исключены любые всплывающие окна или меню, на экране гарантированно отображаются все элементы интерфейса. Должна отсутствовать возможность выйти в главное меню и изменить любые настройки, выключить экран. Защита от дурака, возведенная в абсолют. В этом сильно помог Fully Kiosk Browser: приложение, делающее ровно то что описано выше.

Интерфейс планшета в темных тонах, охрана по ночам предпочитает сидеть в темноте.
Интерфейс планшета в темных тонах, охрана по ночам предпочитает сидеть в темноте.

На данный момент все вместе работает так: при входящем звонке АТС вызывает API нашего сервера, получает ответ (из какого дома звонят, либо номер не найден). Если номер не найден, проигрывает сообщение и вешает трубку. Если номер найден, то сервер посылает номер дома в веб-интерфейс на планшете. Там он подставляется в поле "№ дома", курсор становится на "№ авто" и открывается цифровая клавиатура. Остается ввести цифры номера и нажать "Добавить". После этого курсор остается на том же поле, на случай если нужно ввести несколько номеров подряд. Через 5 минут после звонка клавиатура автоматически исчезает, а поля очищаются.

Можно заметить, что пропуск по трем цифрам гос. номера это не слишком безопасно для КПП, где в пиковые дни проезжает более 1000 автомобилей. Однако, это удобство пользователей: трудно запомнить номер целиком, с буквами и кодом региона, а с тремя цифрами как-то справляются. В первую очередь, звонят на КПП чтобы заказать пропуск представители старшего поколения, кому трудно разобраться с приложением.

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

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

Контроль

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

Сообщения бота в группе
Сообщения бота в группе

Но охранник может просто добавить пропуск тому, кого хочет пропустить. Это не всегда ошибка (например человек подошел и показал документы, что он тут живет), но тоже должно быть зафиксировано. Если пропуск был выписан спустя более 5 минут после звонка, либо выписан не на тот номер дома, с которого был звонок, то приходит другое сообщение в группу в мессенджере.

Бот для уведомления о гостях

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

Сообщение для жителя о приезде гостя
Сообщение для жителя о приезде гостя

Оборудование и инфраструктура

Строить систему начали с видеонаблюдения (камер для считывания номеров автомобилей и просто обзорных) и после изучения вариантов стало понятно, что видео оптимально записывать на сервер, а не на видеорегистратор. Сервер дешевле (комп подойдет самый маломощный, софт бесплатно, затраты только на жесткие диски) и поддерживает любое количество камер, имеет удобный веб-интерфейс. Использовали бесплатный сервер yucca, могу искренне его порекомендовать. Подключение камер организовать было легко: камеры сейчас можно найти за 1-2 т.р. (Tiandy например), подключаются они просто в локальную сеть, ту же что и сервер, только нужно использовать PoE-коммутаторы. С монтажом и настройкой справится любой, кто немного имел дело с локальными сетями или посмотрел 15-минутное обучающее видео по теме и попрактиковался обжимать разъемы RJ-45. Провода от камер провели в имеющееся неподалеку от шлагбаумов помещение, где и разместили сервер.

Веб-интерфейс сервера видеонаблюдения yucca
Веб-интерфейс сервера видеонаблюдения yucca

Следующий шаг это система распознавания номеров. Дорогой софт (30-50 т.р.) и достаточно требовательный к железу, уже не получится запустить на найденном на балконе Пентиум-4. Сначала купили программу Сарапульских систем, много с ней было проблем, но в итоге заставили работать более-менее стабильно. Потом в дополнение к ней купили Автомаршал, и он хорошо заработал сразу из коробки, без дополнительных настроек. Так и работают вместе, но на разных шлагбаумах. Обе программы работают на windows (сейчас появились и версии для linux, но на тот момент не было), поэтому понадобился еще один компьютер, более современный и с windows.

Затем появился описанный выше сервер для работы с пропусками, с веб-интерфейсом на планшете и базой данных. Он был написан на python + flask и тоже лучше работал на linux. К нему появилась АТС asterisk, которая тоже работала на linux, и стало понятно, что весь этот зоопарк нужно как-то объединить, чтобы не держать несколько компьютеров и было легко администрировать удаленно. Был куплен мини-ПК за 30 т.р. с 14-ядерным процессором Intel 12900H, который отлично справился со всеми этими сервисами и другими, реализованными позднее. На него был установлен гипервизор proxmox и несколько виртуальных машин с софтом, описанным выше. Proxmox легок в освоении и очень выручил когда вышел из строя ssd диск. Купили новый диск, восстановили виртуальные машины из бэкапов и все продолжило работать как будто ничего и не произошло. Также очень удобно, что можно работать с одной виртуальной машиной, не трогая другие, которые должны работать 24/7 для работы пропускной системы.

Маленький, но удивительно мощный мини-ПК и вставленный в него GSM-модем
Маленький, но удивительно мощный мини-ПК и вставленный в него GSM-модем

Отдельного внимания заслуживает реализация IP-телефонии. Перейти на нее нужно было, не потеряв уже записанный всеми жителями мобильный номер. Самым простым решением было купить виртуальный номер, настроить переадресацию всех вызовов с мобильного номера на него, а с него настроить переадресацию на АТС asterisk, установленную на нашем сервере. Реализация этого была уже не так проста, IP-телефония это целый набор устаревших технологий, наложенных друг на друга. Периодически связь виртуальной АТС и нашего сервера ломалась из-за изменения настроек на стороне этой АТС. Оплата этой схемы тоже была не дешевой, переадресация каждого вызова стоила для нас 15 руб. Детально описывать эту схему не буду, потому что нашлось гораздо более стабильное, красивое и дешевое решение, которое называется chan_dongle. Это модуль asterisk, который поддерживает работу со старыми GSM-модемами, которые легко найти по 500 р. на Авито или просто в дальнем углу ящика стола. Оказалось, что у этих модемов можно включить работу с голосом и буквально звонить через них и принимать звонки. Таким образом, схема крайне упростилась: есть компьютер, на нем сервер asterisk с GSM-модемом, и в одной локальной сети с ним находится IP телефонный аппарат. Даже без интернета эта схема продолжит работать, фактически она ничем не уступает использованию смартфона, добавляя при этом массу новых возможностей.

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

P.S. Еще одна история

В начале охранники пользовались радио пультами для открытия ворот. И желание как-то контролировать происходящее привело к мысли о фиксации события нажатия кнопок на пульте, и я решил сделать приемник сигналов пульта. Сначала я пробовал сделать приемник на контроллере 8266 (WeMos)

WeMos D1 с припаянным приемником 433 МГц и антенной в четверть длины волны
WeMos D1 с припаянным приемником 433 МГц и антенной в четверть длины волны

Затея эта потерпела фиаско, т.к. пульт использовал алгоритм шифрования Nice Flor-S и при каждом нажатии на кнопку передавал различные посылки. Разобраться в этом было совершенно невозможно:

16:59:07.318 -> 1100000001111111000100000100000110000000111111100010000010000011010000011111110001000001000001100100001111111000100000100000110000000111111100010000010000011000001111111000100000100000
16:59:15.851 -> 1100110011110100100010111011100111101001000101110011001111010010001011101111100111101001000101110000110011110100100010111011100111101001000101
16:59:20.253 -> 1100001000000000000011011010000000000000110000001000000000000011001000000000000011110010000000000000111010000000000000
16:59:26.557 -> 110011010010001100111100010100100011001111010100100011001111000101001000110011110111010010001100111100000101001000110011
16:59:31.682 -> 1110110000111001101110111111110000111001101110111111000011100110111011111111110000111001101110111100110000111001101110111100011100001110011011101111
16:59:34.949 -> 11111010000000101111111111110100000001011111001110100000001011111000111101000000010111110111101000000010111110011111010000000101111
16:59:37.300 -> 1110010000000000010101000101100000000000000101010001011000000000000101010001011000000000000001010100010110110000000000010101000101100000000000000001010100010
16:59:40.001 -> 111100001011100011001100010001110010111000110011000100011000101110001100110001000111110010111000110011000100011000001011100011001100010001100000101110001100110001000
16:59:43.213 -> 1101001111100111011100001111100111011101110011111001110111000000111110011101110100111110011101111100111110011101
16:59:45.818 -> 11110001101101110101110000011011011101011100011011011101011000011011011101011111000110110111010110000001101101110101
16:59:48.333 -> 111000111111110110001000111000111111110110001000111000111001111111101100010001110001111110111111110110001000111000111000011111111011000100011100011100001111111101100010001110001

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