19/10/2011 22:06:09
И такая дребедень
Целый день
То тюлень позвонит, то олень.
(К. Чуковский, "Телефон")
Пожалуй, трудно будет не согласится с тем фактом, что в "умном" доме должны быть "умные" двери и не менее "умная" калитка забора. Помимо чисто декоративной функции калитка выполняет и в некотором роде защитную, а значит должна быть заперта на замок. Но мы живем в Умном Доме, поэтому не хотим бегать к калитке каждый раз, когда приходит какой-нибудь гость, но хотим иметь возможность поговорить и посмотреть на него, прежде чем пускать в дом. Кроме того, удобно было бы использовать электронные ключи вместо обычных.
"Что же тут умного?" - спросит читатель. Домофон, вызывная панель, управляемый замок, считыватель и контроллер ключей. Все это вместе с установкой обойдется тысяч в 8-10 в зависимости от навороченности деталей. "Эка невидаль! Все это есть в любом самом обычном доме."

Не шумите! Согласен! Но я предлагаю не просто установить домофонную систему контроля доступа, а интегрировать ее в общую систему "Умного Дома". А означает это вот что.
1. Считыватель ключей Touch Memory (iButton) мы подключим к серверу под управлением owfs. Это позволит нам: а) хранить в памяти неограниченное количество ключей б) легко управлять списками ключей (разрешить/запретить) через Web-интерфейс, в) реализовать различные алгоритмы доступа (например, после 9 часов вечера калитка открывается только определенным людям; доступ по времени или дням недели) г) получать сообщения SMS / Email о попытках доступа с незарегистрированных ключей и многое другое.
2. Вызывную панель мы подключим к программному серверу IP-телефонии Asterisk. Это позволит нам: а) говорить с гостем через любой телефон в доме б) осуществлять перехват, перенаправление звонков с вызывной панели в) осуществлять перенаправление вызова на мобильный или городской номер или даже в Skype в случае, если никого нет дома
3. Видеокамеру вызывной панели мы подключим к ZoneMinder. Это позволит нам: а) видеть человека с любого компьютера или мобильного устройства или через Интернет б) включить видеокамеру вызывной панели в общую систему видеонаблюдения дома в) осуществлять запись видео по движению в кадре или в момент нажатия кнопки вызывной панели г) хранить практически неограниченный архив видео д) распознавать лица входящих людей
4. Управляемый замок (электромеханический или электромагнитный) мы подключим к исполнительному устройству Умного Дома. Это позволит нам открывать калитку с любого телефона в доме, с любого компьютера, из Интернет, с мобильного телефона или даже с помощью сообщения по электронной почте.
Ну а теперь немного подробнее непосредственно о самом подключении.
Домофонный ключ iButton или "таблетка" устройство непростое. В нем встроена довольно сложная микросхема DS1990A, которая поддерживает полноценную работу в цифровой сети 1-wire. В микросхему производитель, компания Maxim, записал уникальный идентификационный код. Этот то код и считывается мастером/контроллером сети в тот момент, когда мы подносим ключ к считывателю.

К счастью у меня в доме уже работает сеть 1-wire, к которой подключены температурные датчики DS18B20, датчики контактов DS2406, исполнительные модули DS2413 под управлением пакета owfs. Нет ничего проще подключить к сети и считыватель TM. Но как с ним работать?
Компьютер с подключенным к нему мастером сети 1-wire (например, DS9490R) не может работать со считывателем так, как это делает микроконтроллер, определяющий логический ноль - "Presence Pulse". Поэтому единственным способом работы со считывателем является циклический опрос сети. Но чтобы избежать чрезмерную нагрузку как на саму сеть, так и на центральный процессор компьютера, можно ограничить опрос сети, скажем, 3-5 циклами в секунду.
Простейшая программа на PHP для опроса считывателя может выглядеть так:
<?
require "/opt/owfs/bin/ownet.php";
$ow=new OWNet("tcp://localhost:3000");
while ( true )
{
if ( $keys_flag > 0 )
$keys_flag--;
else
{
unset($ow_keys);
$ow_keys = $ow->dir("/uncached/bus.0/");
//if ( preg_match("//01..+,//", $ow_keys['data']) )
$s_pos = strpos($ow_keys['data'], "/01.");
if( $s_pos > 0 )
{
$cur_key = substr($ow_keys['data'], $s_pos + 1, 15);
//$cur_key = preg_replace("/.*/(01..+),.*/", "$1", $ow_keys['data']);
echo $cur_key;
$keys_flag = 25;
}
}
usleep(200000);
}
?>
Здесь мы опрашиваем сеть 5 раз в секунду. В случае, если в сети появляется элемент с адресом, начинающимся на "01." (метки DS1990A), мы выводим адрес ключа на экран (этот блок мы потом поменяем на запрос к базе данных и прочий функционал, связанный с авторизацией). После того, как в сети замечен iButton, опрос блокируется на 5 секунд, чтобы избежать лишних и бессмысленных повторных операций.
Обратите внимание на закомментированные строчки. Методом $ow->dir() мы получаем список всех устройств, доступных в сети. Определить наличие элемента с адресом 01.* можно с помощью регулярных выражений, но с точки зрения производительности лучше воспользоваться функциями strpos() и substr(), так как они работают вдвое быстрее.
Хочу также акцентировать внимание на том факте, что следует читать непременно "uncached" ветку owfs, так как "корень" кешируется.
В качестве считывателя подойдут любые устройства стоимостью от 150 рублей и выше. Выбор определяется только дизайном самого устройства.
Вообще в природе, в Красной Книге, встречаются вызывные панели, поддерживающие протокол SIP. Стоимость таких панелей начинается от 20 000 руб, выполнены они не в антивандальном корпусе, не предназначены для работы на российской улице (это, я напомню, от -35С) и имеют дизайн, который вызывает стойкое и непреодолимое желание немедленно открутить устройство от столба. Поэтому мы воспользуемся примечательной во всех смыслах и гениальной идеей Марата Гулевича из Вильнюса, за что ему большое спасибо.
Мы возьмем самую обыкновенную вызывную панель AVC-305 (или любую другую, например, МВК-325ц) и подключим ее к недорогому SIP-телефону, таким образом получив SIP-домофон. Идея очень проста. Нужно препарировать телефон и подключить к нему вызывную панель так, чтобы микрофон и динамик панели работали вместо микрофона и динамика спикерфона, а кнопка панели включена параллельно кнопке спикерфона. Таким образом вызывная панель у нас станет выносным спикерфоном SIP-телефона.
Остается только приобрести какой-нибудь недорогой SIP-телефон. В статье "Видео домофон HOWTO" Марат пишет об использовании Grandstream Budgetone 101. Действительно, это одна из самых дешевых моделей на сегодняшний момент. Я же решил, что экономия в 500 рублей несущественна и приобрел телефон Yealink SIP-T20. С одной стороны, я давно хотел попробовать продукцию Yealink, с другой стороны в Интернете можно встретить хорошие отзывы как о самой модели в целом, так и о спикерфоне в частности. Телефон обошелся мне в 3300 руб.
Раз уж у меня появился этот телефон, прежде чем взяться за отвертки, кусачки и изоленту, я решил сравнить его с Cisco SPA504G.
Внешне телефон Yealink SIP-T20 похож на своего более именитого собрата. Вроде бы и цвет пластика схож и местами дизайн. Но качество изготовления уступает. И это видно невооруженным глазом. Нет, каких-то явных огрехов нет, но на ощупь пластик Cisco приятнее, кнопочки в нем сделаны более качественно, нажимаются мягко, трубку держать удобнее. Даже витой шнур, который идет к трубке Cisco SPA504G более мягкий и качественный. ЖК-панель в Yealink T20 также хуже. В целом удовольствие от использования телефона Cisco SPA504G испытываешь больше и сделан он добротнее. Но у Yealink есть и свои преимущества. Во-первых, поставляется он с блоком питания, тогда как для Cisco нужно покупать (и не самый дешевый). Во-вторых, Web-интерфейс русифицирован. Практически к каждому параметру есть подсказка, а это очень важно, если вы не семи пядей во лбу в области IP-телефонии, так как специфических настроек в такого рода телефонах очень много.

А они похожи...
Но все эта лирика. Самое главное в телефоне, и IP-телефон здесь не исключение - качество звука. Так вот в этом компоненте Yealink, как мне показалось, ничем не уступает Cisco. А, может быть, по субъективным впечатлениям даже немного превосходит. Качество спикерфона (чувствительность микрофона, громкость динамика) в телефоне Yealink SIP-T20 на высоте. Таким образом, телефон Yealink SIP-T20 стоимостью почти вдвое дешевле SPA504G хотя и не побалует пользователя изящным пластиком и хорошими манерами, обеспечит высокое качество разговора, сгодится на роль трудовой лошадки и подопытного кролика, поэтому смело отправляется на операционный стол.
Для переделки потребуется:
1. Отрезок шестипроводного ленточного кабеля длиной около 35 см (с ним удобнее работать).
2. Гнездо 8P8C TJ8 (RJ-45) в плату.
3. Термоусадка диаметром 2 мм.
4. Заряженный пистолет для термоклея.
5. Приличный паяльник с припоем и флюсом.
Примерная последовательность переделки:
1. Отсоединяем от аппарата микротелефонную трубку, чтобы не мешалась (если подключена).
2. Выкрутив крепёжные винты, снимаем нижнюю крышку телефона. Для удобства дальнейшей работы вынимаем из неё разъемы трубки и гарнитуры, пометив для верности, где какой.
3. Отпаиваем от платы провода, идущие к динамику. Изолируем их и закрепляем изолентой на динамике, затащив их внутрь отсека динамика (видно на следующей фотографии).
4. Отсоединяем от платы разъём с проводами от микрофона.

5. Берём ленточный кабель, раздираем его с одного конца на пары сантиметров по 5.
6. Первую пару, не маркируя, припаиваем к контактам межплатного разъема, как показано на фото синим цветом. Эта пара должна «звониться» при нажатии кнопки «Спикерфон» на аппарате. Проверьте это! Кстати, у меня эта пара припаяна к разъёму со стороны контактных площадок кнопок на нижней коричнево-жёлтой плате, так как вначале мне не было известно, куда выведены контакты кнопки «Спикерфон». И это видно на фото. Конечно же, ее правильнее и проще припаять к верхней зеленой плате. Имейте в виду, что это провода не просто от кнопки, а от матрицы кнопок. Поэтому ни с чем другим, кроме вызывной кнопки панели, они соединяться не должны!!!
7. Жилы второй пары помечаем красным и синим маркером и припаиваем туда, откуда отпаяли провода динамика: синий провод – верхний, красный – нижний.

8. Жилы третьей пары помечаем черным и красным маркером и припаиваем снизу к контактам розетки микрофона: черный провод – левый, красный – правый. Здесь важно соблюсти полярность, так как микрофон электретный и на него из аппарата подаётся напряжение питания. Для удобства выполнения этой операции плату на время лучше открутить. Можно также отрезать провод сантиметрах в 3-х от вилки микрофона и припаяться к нему, но тогда вернуть телефон к «прежней жизни» будет гораздо труднее.

9. Берем нижнюю крышку и выламываем из неё заглушку PSTN. На ее место термоклеем вклеиваем гнездо 8P8C TJ8. Выбор термоклея обусловлен тем, что гнездо меньше отверстия где-то на полмиллиметра, и термоклей заполняет образовавшийся зазор, обеспечивая прочное, хотя и не очень красивое изнутри, соединение. Для успеха этой операции склеиваемые поверхности хорошо бы обезжирить.

А это вид с внутренней стороны крышки.

9. Второй конец ленточного кабеля распаиваем на выводы 8P8C TJ8 в соответствии со схемой и изолируем термоусадочной трубкой:

В результате переделки нутро телефона должно выглядеть примерно так:

10. Места паек отмываем от остатков флюса.
11. Возвращаем на место разъемы трубки и гарнитуры. Аккуратно, чтобы не прищемить лишнего, закрываем нижнюю крышку и закручиваем крепёжные винты. Подключаем трубку, адаптер питания, кабель LAN.
12. В соответствии со схемой, подключаем вызывную панель, включаем телефон в сети и проверяем. Все должно работать!

Для переделки потребуется:
1. Отрезок ленточного кабеля длиной около 35 см (с ним удобнее работать).
2. Приличный паяльник с припоем и флюсом.
3. Прочий слесарно-монтажный инструмент.
Примерная последовательность переделки:
1. Окручиваем 4 самореза, с помощью которых закреплена задняя крышка, и снимаем ее.
2. Окручиваем 3 самореза, на которых закреплена большая печатная плата, и извлекаем ее из корпуса, насколько позволят провода. Маленькую печатную плату видеокамеры не трогаем.
3. Отключаем от маленькой платы разъем трехпроводный разъем.
4. Выпаиваем из платы 4 провода, идущие к динамику и микрофону (обведены красным).
5. Отпаиваем их от динамика и микрофона. Они больше не понадобятся - удаляем.
6. Откладываем корпус в сторону.
7. Выпаиваем из платы электролитический конденсатор, показанный стрелкой.

8. Отпаиваем от выводов реле силовой провод и удаляем его, продёрнув через два отверстия в плате. Выпаиваем SMD резистор 101.

9. Выпаиваем два SMD резистора с указанных позиций (на фото уже выпаяны). Перерезаем две дорожки, ведущие к кнопке.

10. Перерезаем дорожку, ведущую от кнопки под реле.

11. Припаиваем к контактам кнопки 2-проводный плоский кабель.

12. Возвращаемся к работам с корпусом. Припаиваем к выводам динамика отрезок плоского 2-проводного кабеля, маркируем жилы.

13. Припаиваем к выводам микрофона отрезок плоского 2-проводного кабеля, маркируем жилы.

14. Запаиваем перемычку. Продергиваем провода от микрофона и динамика в отверстие платы. Устанавливаем плату на место в корпус.

15. Вставляем трехпроводный разъем на место, в плату видеокамеры.
16. Закрываем заднюю крышку, прикручиваем саморезами.
17. Соединяем панель с SIP телефоном по схеме, которая приведена выше
Включаем, проверяем. Все должно работать!
Что мы сделали:
1. Сохранили работоспособность видеокамеры и инфракрасной подсветки. Согласно инструкции, на панель должно быть подано напряжение питания 12В, и может быть снят видеосигнал. Выхода аудиосигнала в прежнем виде теперь нет, и провод «Аудио» можно удалить.
2. Обесточили полностью схему усилителей и включения электрозамка.
3. Полностью изолировали от схемы кнопку вызова.
4. Вывели микрофон и динамик для подключения их к SIP телефону.
Нам необходимо, чтобы сразу после снятии трубки (нажатии кнопки спикерфона) SIP-домофон позвонил по определенному номеру. К счастью T20 поддерживает эту функцию, которая называется "Горячая линия".
Телефон -> Параметры
// Указываем номер, на который домофон будет звонить по умолчанию
Номер горячей линии: 102
// Чтобы наш домофон не ждал набора другого номера, скажем ему, чтобы набирал "горячую линию" сразу
Задержка вызова номера: 0
// После отбоя нам не хочется слушать сигнал "занято", поэтому отменяем эту "фичу"
Длительность сигнала занято(секунды): 0
Занятно не только посмотреть, но и послушать, что происходит рядом с калиткой. Сделать это просто. Достаточно в телефоне включить автоответ. В последних версиях прошивок для Yealink автоответ перекочевал из настроек телефона в настройки SIP-аккаунта, что очень логично, поэтому идем в закладку "Аккаунт" и выставляем опцию "Автоответ" в режим "Включено".
Чтобы можно было открывать замок на калитке с любого телефона, я применил следующее решение. Я определил, что при вызове номера '0' запускается скрипт, который управляет модулем, подающим кратковременно питание на замок. Сняли трубку, нажали 0, дверь открылась.
В файле extensions.conf
exten => 0,1,System(php /home/user/open-door.php)
Но когда нам звонят с вызывной панели, нажатием кнопки 0 не обойтись, нужно перевести звонок на номер '0'.
Для этого нужно, чтобы пользователи имели такую возможность - опция 't' (transfer, перевод вызова)
exten => _1XX,1,Dial(SIP/${EXTEN},,t)
А в файле features.conf внести изменения
[featuremap] blindxfer => #
По умолчанию перевод (transfer) включается нажатием комбинации '#1', что в нашем случае не совсем удобно, поэтому я переопределил его на простую "решетку".
Человек звонит в домофон, мы говорим с ним, а потом, чтобы открыть дверь, нажимаем #0
Спустя некоторое время после начала использования системы, домочадцы слезно попросили меня сделать так, чтобы рингтон (мелодия вызова) с домофона отличался от оного для телефонных звонков. Так как звонок с домофона поступал на телефон Cisco SPA504G, который имеет 4 линии, я решил пойти по простому варианту, а именно завести еще один аккаунт в Asterisk, а в настройках SPA504G прописать свой рингтон на этот новый extension. Теперь осталось только выбрать мелодию звонка. Думал я не долго. Этой мелодией будет тема из известной мобильной игрушки Angry Birds.
Но возникла одна проблема. При всех своих супервозможностях Cisco SPA504G поддерживает пользовательские рингтоны только с параметрами 8КГц, WAV, 6 секунд. Понимаете? 6 секунд. Не беда, я вырезал из темы начало и немного ускорил его, чтобы упаковать в 6 секунд. Получилось забавно.
Ринготон Angry Birds (WAV, 8кГц, 6000 мс)
Мелодия вызывает стойкое желание не откладывая бежать открывать калитку.
Для загрузки рингтона в телефон я воспользовался утилитой ringtone.exe
Я приобрел врезной электромеханический замок CISA 14020. Почему не магнитный и не накладной? Очень просто. Калитка ажурная, не глухая, без горизонтальной планки. Ответную часть электромагнитного замка можно было бы закрепить только сбоку, но она бы мешала проходу. Накладные замки все очень массивные и моя высокохудожественная натура не перенесла бы такого надругательства. К счастью итальянский амиго придумал миниатюрный замок CISA 14020, который можно врезать в металлическую раму калитки, представляющую из себя трубу 40х40. То есть замок снаружи вообще не видно. Замок управляется подачей напряжения 12В (постоянного или переменного, 15ВА).
От старого ADSL-модема я взял блок питания AC 15В/15ВА и решил, что, учитывая длину проводов и падение напряжения, он подойдет. Управлять замком можно с помощью любого релейного модуля. У меня еще оставался свободный порт в устройстве IP Power 9212 Delux, поэтому я использовал его.
Собственно, это почти все. Единственный нюанс, связанный с управлением замком заключается в том, что подачу напряжения нужно ограничивать по времени, иначе замок может выйти из строя. Сделать это очень просто. Вот тот самый open-door.php, упомянутый выше.
<?
require "key.php";
key_sw("door", 1);
usleep(750000);
key_sw("door", 0);
?>
Где в key.php реализована функция key_sw(), работающая с IP Power 9212 Delux. Более подробно о работе с этим устройством и реализации функции key_sw() можно прочитать в статье. Напряжение подается всего 0,75 секунды, чего вполне достаточно для срабатывания замка.
С видеокамерой вызывной панели все вышло совсем просто. Я только подключил ее к плате захвата и настроил ZoneMinder. Кроме того, после нажатия на кнопку вызова, фото с камеры наблюдения отображается на ТВ через спутниковый ресивер. Очень удобно, сидя у телевизора, сразу видеть кто звонит в дверь. В данный момент я провожу эксперименты с распознаванием лиц. Первые впечатления положительные.
Данная статья, на мой взгляд, наглядно демонстрирует насколько выгодна централизованная реализация Умного Дома и интеграция отдельных модулей в единую среду, которая управляет всеми элементами системы.
Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.
2012-05-05 11:17:54 | Andrey_B
Ичи, каждый ключ Dallas имеет уникальный идентификатор. Авторизация происходит по этому идентификатору. Он заносится в систему либо вручную, либо автоматически, как только скрипт детектировал неизвестный ключ, а уже администратор определяет каким ключам дозволен доступ, а каким нет. У этих 50 людей, о которых вы пишите, совершенно разные идентификаторы. Они не могут открыть своими ключами калитку. В этом и прелесть Dallas iButton, что можно использовать один ключ в разных системах доступа.
Другое дело, что с помощью относительно нехитрых средств можно сделать эмулятор ключа, но для этого нужно знать его адрес, а значит физически получить к нему доступ. Но это тоже самое, что сделать слепок обычного ключа. Поэтому насчет подъездных ключей вы явно погорячились.
Так как камера у меня является частью системы видеонаблюдения, напряжение на нее подается всегда и я в любой момент времени могу посмотреть что происходит рядом с калиткой. Это очень удобно.
Как происходит вывод на экран ресивера очень подробно описано в этой статье и в статье "Вывод на экран ТВ сообщений Умного Дома через OpenBox HD".
Не совсем понятно что значит "на все номера"? Это как? В идеологии любых АТС звонок имеет совершенно определенный адрес. Но я понимаю, откуда идет вопрос. Что, если вы находитесь в другой части дома. Тут есть два решения. Первое - перехват звонка. Это стандартная функция Asterisk. Но для этого вы должны услышать вызов. Если основной телефон звонит тихо, можно сделать вызов через центральную систему оповещения или мультирум (если такая присутствует в доме). Второе - Asterisk может переводить звонок с номера на номер, если в течение какого-то времени трубку не сняли.
2012-05-05 09:54:05 | Ичи
Сейчас считыватели EM-Marine могут эмулировать формат Dallas (TM), так что подключить его проблем нет. Подъездные ключи лучше не использовать, иначе ещё есть более 50 ключей от вашей калитку у людей, которых Вы не знаете.
Немного не понятно с видекамерой. На неё можно подавать постоянно напряжение, а можно подавать после нажатия на кнопку. У Вас как сделано, Вы это упустили.
Как происходит вывод на экран, то что через ресивер - это понятно. Но ведь при нажатии кнопки происходит вызов на номер 102 (а можно сделать на все номера?), а как запустить скрипт в "умном доме"?
2012-03-30 13:37:38 | Алексей
Этот путь не всем по душе.
Есть ведь панели, которые имеют телефонный выход (RJ11) и подключаются к любому SIP шлюзу. Панель /control-dostupa.ru/index.php/skud/page/pbxdp/ стоит 1500 р. SIP шлюз в районе 2000 р (/www.voip-shop.ru/grandstream_ht_286.htm).
И ничего курочить не надо.
Понравилась идея, как из SIP телефона управлять замком.
Кстати, IP домофоны уже дешевееют: /videoglaz.ru/good.php?id=12247
2012-03-13 19:23:01 | Andrey_B
Алекс, при нажатии "0" на телефоне, сервер, на котором установлена программная АТС Asterisk, отправляет команду исполнительному IP-устройству, которое, переключая реле, подает напряжение на электромеханический замок. Вызывная панель на это никак не реагирует. 0 - это, грубо говоря, внутренний телефонный номер электромеханического замка.
То есть всегда можно открыть замок позвонив откуда-то извне по телефону на Asterisk и донабрать (если такая функция настроена) внутренний номер "0".
2012-03-13 18:59:06 | Алекс
Так и не понял, при нажатии 0 на телефоне, как реагирует вызывная панель на открытие?
И где запускается скрипт?
2012-03-08 13:08:52 | Stas Therenkov
Это то, что я искал!!! Замечательная статья. Спасибо автору!!!!
2012-03-01 21:03:15 | Andrey_B
Если "патчить" телефонный аппарат подобно описанному в статье, то, конечно, любой IP-телефон.
2012-03-01 17:41:39 | Сергій
Андрей, подскажите, любой ли телефон с IP подойдет для подобных целей? Хотел купить радиотрубку DECT домой, и увидел, что есть телефоны с подключением к телефонной сети и к интернету для IP телефонии. Есть ли в этом смысл? Извините за много букв.
2011-10-26 16:39:17 | Andrey_B
VovCHIK, насчет защиты вы совершенно правы, благо сделать ее нетрудно.
По поводу EM-Marine думал, но у нас у всех Dallas'овские ключи уже есть на связке (подъезды, офисы), поэтому не хотелось вешать еще один брелок - проще было запрограммировать в системе уже имеющиеся ключи. Но провести эксперимент в части работы считывателей EM-Marine, эмулирующих DS1990A, с мастером DS9490R и owfs интересно. Пожалуй, как-нибудь попробую.
2011-10-26 15:22:32 | VovCHIK
Хороша мысля, надо реализовать, только вот в условиях российской действительности я бы защитился от придурков с электрошокером и не стал бы использовать контактный считыватель, а использовал бы считыватель em-marine и с интерфейсом TM, только вот вопрос совместимости, ведь как я понимаю Touch memory это не только 1wire. Будем пробовать.