"Orks generate a potent psychic gestalt field that allows them to accomplish many feats of technological engineering that might otherwise seem impossible" (c) Выдержка из wiki по wh40k
⚠️ Дисклеймер
Автор осознаёт, что скрытая видеосъёмка нарушает законодательство и право на частную жизнь. Ничем подобным мы здесь заниматься не будем. Этот проект создан исключительно в образовательных и экспериментальных целях — для изучения Raspberry Pi, ее переферии и в целом - just for lulz.
Устройство не предназначено для скрытого наблюдения. Аналогичные устройства находятся в свободном обороте.
Во время тестов устройство устанавливалось с предупреждающей наклейкой, тестирование проводилось с согласия соседей.
Автор не планирует использовать видеоглазок в жилом помещении и настоятельно не рекомендует применять подобные устройства без соблюдения законов и норм приватности.
Предистория
Однажды, мне захотелось установить в квартире дверной глазок. Прочекав доступные варианты на рынке, я остался... Разочарован -_-
Большинство доступных решений страдают одной из трех проблем:
Управление через собственный UI азиатского происхождения, что с ненулевой вероятностью превращает ваш front door в back door.
Необходимость так или иначе курочить дверь, демонтируя штатный глазок, вызывая праведный гнев и вопросы собственника жилья.
Ряд полупрофессиональных решений имеет аналоговые видеовыходы (как от Sony Playstation 1 =)), соответственно, для вывода видеосигнала нужно узкоспециализированное оборудование (может нет, я не спец, но перспектива тянуть 5 метров колокольчиков через прихожую и гостиную к ламповому телевизору меня напугала).
Речь о подобных штуках

Я решил выяснить - получится ли создать собственное устройство с возможностью удаленного доступа к видеопотоку, мониторингу состояния и детектом движения, не имея опыта с микроконтроллерами, не будучи радиолюбителем и обладая весьма ограниченным набором инструментов?
Немного system design
Требования к велосипеду были следующие:
Возможность передачи картинки по локальной сети в реальном времени времени с минимально возможной задержкой в режиме минимальной шакализации
Возможность мониторить состояние устройства включено/отключено, температура
Установка устройства не должна повлечь за собой сверления/распила/деформации или любого иного перманентного изменения дверной панели
Устройство должно быть самодостаточным, без внешнего монитора, передатчика или любой другой переферии за исключением бп, никаких гирлянд из проводов
Стоимость комплектующих не имеет значения до тех пор, пока работа над проектом остается веселой и не требуется дорогостоящего оборудования, например 3D принтера, только ручной колхоз
Известно, что подобные самоделки делаются из головы, но понимая, что проект получится распределенным, ибо для мониторинга состояний (в частности, отключений) нам потребуется внешний наблюдатель, я изобрел некое подобие system design схемы:

Железки
За основу был взят Raspberry PI Zero 2 W. На момент начала работы я ни разу не держал в руках ни одну малинку, но слышал, что работа с ними достаточно интуитивна, т.к. на борту стоит свой дистрибутив linux, кроме того, присутствует нативная поддержка широкого спектра видеоустройств, предназначенных специально для Raspberry. На версию Zero 2 W выбор пал всвязи с т̶е̶м̶,̶ ̶ч̶т̶о̶ ̶о̶н̶а̶ ̶с̶а̶м̶а̶я̶ ̶д̶е̶ш̶е̶в̶а̶я̶̶ ̶и̶з̶ ̶а̶к̶т̶у̶а̶л̶ь̶н̶о̶й̶ ̶л̶и̶н̶е̶й̶к̶и̶ ее небольшими размерами. Начало было положено:

На фото выше представлена сама платка, 128 гб microSD и usb адаптер для оной. Сама настройка достаточно тривиальна - при помощи Raspberry Pi Imager, накатываем на microSD Raspberry PI OS, вставляем карточку в разъем на плате, даем питание, подключаемся к плате по SSH.
Не всегда все шло гладко, в процессе разработки несколько раз вайпал microSD, бывало что малинка не хотела автоматически подключаться к домашнему wi-fi, соответственно доступ к терминалу ломался. На этот случай на плате предусмотрен microUSB разъем под переферию, в паре с mini-HDMI для вывода GUI RPI os на монитор, чем я порой и пользовался для настройки сети.

В качестве камеры использована китайская rpi-совместимая 5 мп камера с AliExpress на гибком шлейфе. На самом деле, выбор камер под данный разъем невообразимо велик. Я прикинул, что качество и возможность ночной съемки (я не смогу адекватно вывести IR подсветку за пределы помещения) мне не принципиальны, однако возможность встроить объектив непосредственно в окуляр глазка выглядит привлекательно, поэтому выбор пал на данный вариант:

Система
Архитектура клиент/сервер. Сервером в данном случае выступает внешняя VPS тачка с Ubuntu Server на борту и самыми дешевыми конфигами, которые только можно арендовать. Немудрено, ведь мы не собираемся транслировать видеопоток через сервер, фактически, он требуется в качестве хоста для tg бота уведомлений + как хранилище состояний подключенных клиентов. Реализация на Go внутри Docker контейнера.
Клиентом считаем саму Zero 2W. Внутри два логических компонента - клиент на Go внутри того-же контейнера и предустановленный mediamtx (https://github.com/bluenviron/mediamtx). Изначально планировалась реализация с использованием Motion - он проще в настройке, он поддерживает распознавание движения из коробки, у него есть собственное подобие фронтенда для доступа к трансляции и настройкам прямо во время работы. К сожалению, после первых тестов я получил от реалий по башке - распознавание движений даже на самых щадящих настройках, потребляет все ресурсы малинки, из-за чего трансляция становится шакальной и дерганной. На замену Motion я пробовал популярное решение RPi-Cam-Web-Interface, однако е̶г̶о̶ ̶я̶ ̶н̶е̶ ̶о̶с̶и̶л̶и̶л при работе с ним на новых версиях RPI os, существуют нюансы, в процессе колдунства над которыми, я наткнулся на mediamtx, с которым и продолжил работать. Сам mediamtx представляет собой интерфейс для работы с камерами + веб сервер для вывода картинки в локальную сеть (то, что нам нужно). Из дополнительных фич - отдельный функционал для работы с нативными камерами малинок, удобно. Basic авторизация, для работы в локальной сети - достаточно.
Изначально Go часть клиента предназначалась для решения двух задач: представляться серверу при запуске устройства (сервер выводит уведомление о подключении), отсылать heartbeat на сервер раз в n секунд (heartbeat прекращается = клиент RIP, выводим уведомление):

Однако после того, как я установил motion и начал с ним экспериментировать, возникла необходимость в системе охлаждения, ибо малинка начала выдавать 80c+ в пиках. Клиент научился репортить температуру при достижении определенных значений:

Проблемы с нагревом не исчезли ни после отказа от детекта движения, ни после того, как я добавил к малинке небольшой радиатор. Судя по всему Zero 2W не очень хорошо справляется с одновременной отправкой потокового видео и поддержкой небольшого контейнера. Пришлось задуматься об активной системе охлаждения.
Корпус и охлаждение
Изначально, я планировал использовать готовый распечатанный корпус для Zero 2W с маркетплейсов. Хотелось оставить возможность пользоваться глазком вручную, поэтому предполагалось, что сама малинка в корпусе будет крепиться к дверной панели при помощи магнитов/присосок/клейкой полосы, а камера, встроенная в некое подобие пробки из пенопласта, должна была выводиться непосредственно к глазку на гибком шлейфе. Таким образом, сам объектив можно было бы вручную вкладывать/вынимать из окуляра глазка, подобно винной пробке.
Примеры готовых корпусов

Из комплекта левого верхнего корпуса как раз и был позаимствован радиатор. Сам корпус неплох, но вентилятор на него без клея не закрепить + крепление самого корпуса к чему либо, в штатном виде, возможно только на клей. Насверлить новых отверстий негде, как вариант - заменить штатные шпильки которыми стянуты панели на более длинные, к удлиненным концам монтировать крепеж. Но проблема с креплением вентилятора остается
Частично из-за того, что мне не удалось с ходу найти годный корпус, частично, из-за того, что я хотел минимизировать использование готовых деталей, я решил мастерить корпус самостоятельно.
За основу корпуса была взята 40мм канализационная муфта, для арматуры использовалась алюминиевая полоса 2x30мм. Из алюминиевой полосы, на коленке была изготовлена скоба для крепления камеры. Из этой же полосы, на другой коленке была изготовлена станина для платы, ее предназначение - центрировать положение платы внутри трубы + защищать плату от изгибания при затягивании крепежа. Эстетические качества итогового изделия, скажем так... Сомнительные, однако свои задачи оно выполняет. Производить слесарные работы без тисков в домашних условиях весело и задорно.

Как упоминалось ранее, конкретно эта плата поставлялась без площадки с пинами, она была дополнительно заказана и припаяна к плате. В качестве кулера к 5v разъему малинки был подключен (а впоследствии - припаян) маленький вентилятор. В результате получилась такая гирлянда:

В результате, после сборки в корпусе, получилось это:

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

В рабочей среде результат значительно лучше, в тусклом освещении фиолетовый оттенок пропадает:

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

Эта проблема решается при помощи ir подсветки, что на фабричных аналогах встроена непосредственно в объектив. К сожалению, мне не удалось придумать как совместить компактную встраиваемость с подсветкой.
С автономностью тоже все не однозначно (в данной реализации - однозначно никак) в компактных фабричных вариантах питание реализовано консервативно - при помощи 5м кабеля. Я пошел этим же путем. Судя по информации с форумов, добавление внешнего акумулятора, даже на 10ма/ч, даст автономность в пределах 6-ти часов, даже если автономная работа будет обеспечиваться в пределах 12, 24, 48-ми часов, этого все-равно будет мало для задач устройства (быть онлайн 24/7), взамен мы получим дополнительную пожароопасную точку отказа в виде постоянно запитанного от сети акумулятора. Поможет автоматическое реле, переключающее питание на акумулятор, но в эту сторону я пока не копал.
Итого получили:
Вывод видео куда угодно, где есть браузер - есть
Мониторинг состояний - есть
Портативность - есть
Кастомизируемость - есть
Стоимость <= 3000 рублей, с учетом малинки, камеры, и всех остальных элементов
Перспективы:
Корпус откровенно спорный - из-за громоздкости слишком сильно отстает от двери, вероятно, будет мешаться в узкой прихожей, стоит рассмотреть вертикальное размещение, как планировалось изначально.
В процессе пришлось отказаться от детекта движений всвязи с ограниченной производительностью Zero 2w. Вероятно, помимо вывода нпрямую, можно было бы транслировать видеопоток на сторонний сервер с производительностью чуть выше картошки, где изображение будет анализироваться на предмет движения. Навязать на все это tg алармы, возможно, LLM штучки с журналированием...
В общем, получилось как-то так =)
P.S. За форматирование прошу простить - первый пост на хабре.
Бонус для трипофобов

Эксперименты с перфорированием для отвода теплого воздуха пошли не по плану. Благо и без этих червоточин плата охлаждается превосходно
Комментарии (27)

Fox_Alex
26.12.2025 23:02Автомобильный набор из камеры заднего вида и экрана решит задачу проще и дешевле. Там 5 метров аналоговой лапши, но все работает. Бонусом там уже установлен широкоугольный объектив.

Raiksler Автор
26.12.2025 23:02Звучит интересно, но что с фокусировкой? Камеры заднего вида обычно без автофокуса. Если за штатный окуляр глазка крепить, не факт что удастся сфокусироваться через оптику глазка. Саму камеру придется доставать из корпуса, вероятно, не удастся с первого раза найти нужный диаметр чтобы удачно поместить ее внутрь окуляра. Если же каким-то образом крепить вместо линзы, то кажется, уже существуют аналоговые варианты, примеры которых я привел в начале поста

IgnatF
26.12.2025 23:02Есть ESP32cam, дешевый вариант. Есть китайская камера А9. Все работает просто вай фай.

F1eex
26.12.2025 23:02Можно куда-нибудь в дверной косяк впихнуть ИК светодиоды так, чтобы они светили в потолок и глазом их было не видно. Отраженного света вполне может хватить для камеры, ИК отражается очень хорошо, вспомните пульт ДУ с новыми батарейками.
А за статью лайк, карму тоже плюсану, когда хватит своей)

RSATom
26.12.2025 23:02По закону вроде нельзя направлять камеру на соседскую дверь.
Я делал немного по другому:
1. Взял одну из самых дешевых ONVIF камер (зачем делать детектор движения самостоятельно если много камер умеют это "из коробки")
2. Поместил ее в отдельную подсеть и закрыл ей возможность коннектиться к внешнему миру (средствами роутера) для защиты от потенциальных бэкдоров
3. Закрепил камеру над дверью - это позволило исключить из кадра соседские двери
4. Потратил несколько лет на создание Open Source велосипеда для рестриминга потока по ONVIF событиям с камеры на VPS для хранения архива записей (VPS один из самых дешевых, места мало, потому архив только за месяц, впрочем больше и не надо) и возможностью удаленного подключения для просмотра записей и видео в режиме реально времени.
В итоге схема такая: ONVIF IP камера -> Raspberry Pi 3 на котором крутится агент для рестриминга видео на VPS -> VPS с работающим сервером к которому подключается агент, на котором хранится архив и к которому можно подключаться из браузера для просмотра в реальном времени или просмотра архива. При этом наружу ничего не торчит. В качестве протокола для передачи видео везде WebRTC. Как-то так.
Если кому интересно - могу предоставить подробности.
RSATom
26.12.2025 23:02А еще сделал второй велосипед, который ставится на Raspberry Pi с монитором, и начинает показывать изображение с той-же ONVIF камеры по получении события движения с нее. В итоге имеем видео глазок, с возможностью хранения архива в облаке, удаленным доступом, и возможностью установки экрана в любом месте квартиры (или даже нескольких штук).
Все вышеперечисленное доступно на GitHub и опубликовано в Snapcraft Store.
Теперь на очереди аналогичное приложение для Android.

needsomedata
26.12.2025 23:02Пишите пост, интересно!

RSATom
26.12.2025 23:02Неужели действительно интересно? В таком случае предлагаю всем желающим голосовать за это собщение. Если будет хотя бы несколько голосов - придется писать статью :)

bzq
26.12.2025 23:02Если там докера нет, то пишите, интересно будет почитать. Докер в малинке мне, как инженеру, кажется неуместным. Ничего не могу с этим поделать.

JBFW
26.12.2025 23:02А зря. Если воспринимать его не как что-то из бигтеха, а всего лишь как способ "изолировать окружение", да еще вспомнить о том что в малинке вполне может стоять многоядерный процессор с гигабайтами памяти, покруче старого ноутбука - это не Ардуино с МК - то почему бы там не быть докеру?

RSATom
26.12.2025 23:02Эх... Все-же придется писать статью. Теперь я знаю как проведу новогодние праздники... :)

conrad98
26.12.2025 23:02Не только на соседские двери, но и на все общие площади, то бишь лестницы и лестничные клетки.
Что бы избежать проблем нужно согласие собственников.
Вот как-то так )

rsashka
26.12.2025 23:02Кажется направлять на соседские двери запрещено только если камера захватывает внутренние помещение соседской квартиры (например, когда она установлена напротив двери).

JBFW
26.12.2025 23:02Как раз нет. Общие они на то и общие. Налепить еще наклейку, информирующую о факте наблюдения, что оно не тайное (кстати, глазок в двери или в домофоне вполне можно подтянуть под тайное).
Вот соседская дверь да - и то, нужно доказать умысел наблюдения именно за этой дверью, а не за общественным пространством: в данном случае могут быть нарушены права ФИО на приватность его частной жизни, может он любовницу водит, пока жена на работе (или наоборот).
Конечно это не помешает соседу-скандалисту вопить и жаловаться, поэтому аргументы и выдержки из законов лучше заготовить заранее, показывать участковому, если до него дойдет.

lex899
26.12.2025 23:02кстати, глазок в двери или в домофоне вполне можно подтянуть под тайное
Подтянуть у нас могут что угодно и куда угодно, но скрытое это камера в плюшевом медведе или пожарном датчике или очках. Оборот средств скрытого видеонаблюдения у нас запрещен, видеоглазки всех видов продаются. Логика в том что обычный глазок тоже является средством наблюдения.
А вот если в кадр видеоглазка попадает дверь соседей тогда сложнее.
и то, нужно доказать умысел наблюдения именно за этой дверью
Нарушение неприкосновенности частной жизни образует состав УК, умысла тут не надо, достаточно факта сбора информации.

frozzzen
26.12.2025 23:02Подключал к малинке камеру от старого мобильника, вроде nokia
61102710. Что-то получилось.В целом у малинок дрянной тепловой дизайн. Чтобы это мало-мальски работало 24/7, нужен радиатор общей площадью порядка 100 кв. см.

JBFW
26.12.2025 23:02Кстати, а нет ли тут предубеждения насчет температуры?
Из практики: сделал себе "десктоп" на базе ARM-одноплатника, работает непрерывно уже больше года, температура процессора от 65 до 80, охлаждения НЕТ - и проблем нет.
х86 при такой температуре - да, это было бы ненормально. Но малинка-то сопоставима, там тоже arm.

RSATom
26.12.2025 23:02По поводу нагрева - согласен, потому предпочтение именно RPi 3. С радиатором приведенным на картинке ниже система работает круглосуточно несколько месяцев без каких либо проблем.

Четвертый и тем более пятый уже вентилятора сильно просят...
Раньше использовал RPi 2, но в один прекрасный момент возникли вопросы совместимости между GStreamer и 32 битным Raspbian - пришлось переходить на тройку.
Но на самом деле RPi не обязателен, просто лично мне он более привычен. В теории можно использовать любую Arm плату на котору можно устанавливать snap пакеты. Ресурсов оно кушает очень мало, поскольку перекодирования видео потока не происходит совсем. Только манипуляции на уровне RTP пакетов.

hobbyte
26.12.2025 23:02Hidden text

лет 10: c270 через usb-hub с доп.питанием воткнут в mr3020 (хаб и mr питаются раздельно от одного бп +5 на 2 разъёма, так отвалов камеры меньше), на котором openwrt и mjpg-streamer, wifi или провод. На "сервере" motioneye и/или frigate-nvr.

Estranged01
26.12.2025 23:02У вас под спойлером фото аналоговой камеры для глазка, но есть такие же и сетевые проводные и wi-fi на 2МП с прошивкой ХМ.

AlexSunSumy
26.12.2025 23:02Я использую ESP32-cam . Скетч написал мне ИИ. Постоянный видеопоток выводит на мой роутер Микротик. Я в нём заменил стандартную http страницу доступа по 80 порту на свою. Где онлайн транслировался видеопоток. Доступ только изнутри сети. Я использую VPN, если не дома. + Запись потока организовал через докер и isee на NAS. Детектор движения там же. Отправки в телегу фото при движении и уведомление и видео 10 сек если движение больше 10 сек. Анализ лиц и т.п.
Доволен.
Была 1 раз проблема с перегревом, но это был мой косяк. Учёл.
JBFW
Фиолетовый оттенок - это ближний ИК-диапазон, который камера видит вот так.
Лечится либо установкой светофильтра на сенсоре или внутренней стороне обьектива (маленький стеклянный квадратик такой), либо заменой линз на ИК-непрозрачные (такие бывают).
Это позволяет видеть в темноте при ИК-подсветке. Подсветку несложно сделать из нескольких мощных 880 или 940нм светодиодов, она не обязана быть в объективе.
Но обычно в подьезде отсутствие освещения - это нестандарт.
В целом получилось, ИМХО, весьма избыточно.
Если цель только смотреть - простая аналоговая камера, от вот таких же маленьких до уличных буллетов или куполов + мини-экран дюймов 4-7 возле двери.
Если записывать - цифровая с sd картой или с регистратором, по цене выйдет как малинка.
А вот такое решение - это уже для экспериментов типа распознавания лиц...
Moog_Prodigy
Освещение вполне может себе быть, только через датчик движения.
Raiksler Автор
Благодарю за информацию касательно фиолетового оттенка, похоже это именно то, чего мне не хватало. Пробовал твикать цветокоррекцию, подключать greyworld. Эффект... Сомнительный. Пойду экспериментировать с фильтром =)
Что же касается избыточности исполнения, сложно с вами не согласиться, с небольшим уточнением: основное требование к таким штукам практически всегда - компактность. В идеале - размещение с внутренней стороны двери. Даже если с соседями по площадке (как в моем случае) удалось договориться, существуют личности с соседних этажей, которых наличие явной ip камеры над дверью, скажем так... Расстраивает. Есть немалый риск повреждения имущества - как самой камеры, так и двери. Всякие громозские варианты в общедомовом - не варианты. В комментах уже навели на ESP32cam, похоже, что для простого вывода изображения в локальную сеть, это самый оптимальный вариант
Изначально, как раз планировался захват движений с распознаванием лиц, но когда выяснилось, что zero 2w не вывозит, останавливаться было уже поздно =)