SIP-домофон своими руками 2.0

19/12/2018 21:13:43

Впервые SIP-домофон я соорудил еще в 2011 году. Тогда было применено довольно топорное, не очень красивое, но вполне эффективное решение - расковырять обычный IP-телефон и соединить его с динамиком и микрофоном аналоговой вызывной панели. Фактически трубка телефона и кнопка спикерфона были вынесены на столб калитки. При всей простоте и дешевизне у этого решения была масса недостатков. Самые главные - невысокое качество связи, фоновые шумы, треск. Другой недостаток - большое количество проводов, которые необходимо было подвести к вызывной панели. Качество аналогового видео также оставляло желать лучшего. И несмотря на то, что все это благолепие достаточно длительное время работало, и надежно работало, тонкая душевная организация испытывала упорный дискомфорт. Тяжелые чувства охватывали меня и при взгляде на пучок проводов, идущий к вызывной панели, и от понимания того, как это все по сути криво и костылеобразно. И это при том, что на дворе уже давно Windows с позволения сказать 10, iPhone Xs и прочие достижения цивилизации в лице Linux Kernel 4 и Asterisk 15.

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

С некоторым облегчением я понял, что жизнь только начинается и пора бы уже вдохнуть в идею домашнего SIP-домофона свежую кровь, новые килобайты и пару хороших мегапикселей. Сначала я хотел пойти по пути пользователя "kodr" и купить что-то готовое вроде Dahua VTO200A. Но с одной стороны немного останавливала цена, которая весьма метко отражена в названии компании, с другой - очень не хотелось возиться со всеми этими неродными прошивками, руссификациями и прочим. Душа просила чего-то чистого, как воздух Антарктики и светлого, как грудка пингвина. Мне ужасно захотелось собрать SIP-домофон своими руками, из подручных средств, но с богатыми возможностями. И я собрал.

SIP домофон своими руками
Детская развивающая игра-конструктор "Юный связист"
Для детей среднего и старшего школьного возраста


Про Raspberry Pi 3

В качестве центрального элемента SIP-домофона я выбрал Raspberry Pi 3. Разумеется, можно взять любой понравившийся мини-ПК. Raspberry Pi 3 (далее RPi) привлекал относительно невысокой ценой, доступностью, достаточной производительностью и внушительным сообществом пользователей. Главное - в нем есть встроенный Wi-Fi. Я хотел свести к минимуму количество проводов, идущих к блоку домофона, поэтому наличие беспроводного интерфейса сыграло важную роль. Впрочем, всегда остается возможность воткнуть Wi-Fi-свисток в USB-порт даже в том случае, если в мини-ПК его нет.
Питание RPi обеспечил DC-DC конвертер 12В-5В (синяя плата). Подробнее об этом я писал в статье про петушка.
Я скачал Raspbian с официального сайта и установил его на SD-карту. Описывать этот процесс нет смысла. Все прошло штатным образом. Теперь у меня есть платформа. Что дальше?

 

Про SIP-клиент

Чтобы Raspberry Pi чудесным образом из тыквы превратился в SIP-клиента (SIP-домофон), необходим софт. Я долго изучал особенности и возможности разных программ и пришел к выводу, что отличным вариантом будет использование библиотеки PJSIP. Не буду много писать про данное ПО. Скажу коротко - эта такая мощная штука, где есть все. Но я вовсе не горел желанием собственноручно писать SIP-клиент, используя обширные возможности библиотеки. В PJSIP меня главным образом привлекло то, что в состав исходников в качестве демонстрации возможностей либы включен консольный SIP-клиент (нет, это не шутка!), который называется PJSUA. Я задался вопросом: а нельзя ли как-то приколхозить эту демо-прогу в качестве основного программного обеспечения моего будущего домофона?

 

Про компиляцию PJSIP

Библиотеку pjsip не первой свежести можно найти в репозитории Raspbian, но в ней нет того, что мне было нужно - консольного демо-клиента pjsua. Поэтому единственным вариантом было скачать библиотеку с сайта разработчика и скомпилировать ее самостоятельно. Сделать это оказалось не так просто, но я справился.

1. Качаем исходники pjsip.

wget http://www.pjsip.org/release/2.6/pjproject-2.6.zip
unzip pjproject-2.6.zip
cd pjproject-2.6/

2. Устанавливаем минимально необходимый для компиляции набор пакетов.

sudo apt-get install libasound2-dev libssl-dev libv4l-dev libsdl2-dev libx264-dev

3. Правим user.mak, содержимое которого должно быть таким

export CFLAGS += -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
export LDFLAGS +=

4. Правим third_party/build/os-auto.mak.in

Комментируем некоторую часть строк, которые касаются WebRTC. Скачать файл.

5. Компилируем

sh ./aconfigure
makde dev
make

6. Теперь у нас есть главное - pjsua


Про PJSUA

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

pjsua
pjsua - консольный SIP-клиент

Несмотря на то, что pjsua является по сути демонстрационной программой, это полноценное ПО для осуществления звонков.
Управлять программой просто. Нажимаем: m (make new call) и вводим, например, sip:102@192.168.0.251, где 102 - номер абонента, а то, что после собаки - адрес SIP-сервера.

Для того, чтобы pjsua соединился с Asterisk, я создал конфигурационный файл my.conf, содержащий данные для авторизации:

--id sip:150
--registrar sip:192.168.0.251
--username 150
--password swordfish
--quality 10
--no-vad

Разумеется, клиент 150 должен быть заведен в настройках Asterisk с указанными учетными данными.
Но прежде чем запустить pjsua первый раз необходимо сделать странную вещь.

sudo modprobe snd-dummy

Поясню. При всей своей оснащенности у Raspberry Pi 3 нет... входа для микрофона. Ну то есть его совсем нет. И если запустить pjsua просто так, то программа поперхнется, ругнется и замертво свалится в придорожный бурьян. И вот эта странная вещь - "snd-dummy" создает виртуальное устройство-затычку, эмулирующую вход микрофона. Теперь можно смело запускать нашу супер-программу.

pjproject-2.6/pjsip-apps/bin/pjsua-armv7l-unknown-linux-gnueabihf --config-file my.conf --playback-dev 1 --capture-dev 8

Здесь --playback-dev - это номер устройства аналогового выхода RPi, а --capture-dev - номер как бы аналогового входа микрофона, а на деле "затычки"
Посмотреть доступные номера устройств можно, кстати, с помощью программы pjsystest, которая лежит рядом с pjsua.

После того, программа стартовала, можно сделать звонок на IP-телефон ( m -> sip:102@192.168.0.251 в моем случае) и услышать... Ну ничего не услышать, потому что микрофон то у нас ненастоящий. Но если сказать, что-то в трубку IP-телефона, на который мы позвонили, то мы услышим в динамике/наушниках, подключенных к RPi звучание собственного голоса. Но, позвольте! Что это, извините, за хрень?


Про аналоговый выход Raspberry Pi и микрофон

Думаю, владельцы RPi знают про эту особенность, а для тех, кто не знает, расскажу. Качество родного аналогового выхода, куда подключаются динамики, в RPi не просто ужасное, оно ужасное-ужасное-ужасное. Вот так. Нет, я не для того с таким удовольствием и так качественно срезал свой SIP-домофон 1.0 с калитки, чтобы соорудить вместо него это "мыло".
Но, слава богам! Великому Мегабайтосу и грозному Рутусу Системусу, вопрос решается довольно просто - покупкой внешней звуковой карты.
Возможно, я немного преувеличиваю и кого-нибудь с оттоптанными стадом медведей ушами устроит и родной аудиовыход RPi. В этом случае достаточно будет купить вот такой внешний микрофон.

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

Ugreen External Sound card
В хорошей поделке все должно быть прекрасно: и софт и железо и внешняя звуковуха

Никаких дополнительных драйверов или чего-то такого, что вызывает неприятные ощущения в определенных местах тела, не возникло. Устройство при включении в USB-порт определилось вот так.

Sep 30 14:05:40 raspberrypi kernel: [20627.658137] input: C-Media Electronics Inc. USB Advanced Audio Device as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.3/0003:0D8C:0024.0001/input/input0
Sep 30 14:05:40 raspberrypi kernel: [20627.728404] hid-generic 0003:0D8C:0024.0001: input,hidraw0: USB HID v1.11 Device [C-Media Electronics Inc. USB Advanced Audio Device] on usb-3f980000.usb-1.2/input3
Sep 30 14:05:40 raspberrypi mtp-probe: checking bus 1, device 4: "/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2"
Sep 30 14:05:40 raspberrypi mtp-probe: bus: 1, device: 4 was not an MTP device
Sep 30 14:05:41 raspberrypi kernel: [20628.017024] usbcore: registered new interface driver snd-usb-audio

Теперь при запуске pjsua указанным ниже способом я услышал чистейший звук. На душе стало легче и спокойнее.

pjproject-2.6/pjsip-apps/bin/pjsua-armv7l-unknown-linux-gnueabihf --config-file test.conf --playback-dev 9 --capture-dev 8

Не отношу себя к экспертам в области Hi-End, которые родились с Г-807 в руках, но качество проигрывания различных звуковых файлов через эту штуковину (вроде бы, CM6533) практически не отличалось от того, что я слышал на своем стационарном ПК, снабженным чипом Realtek ALC888B. В общем, годится.


Про микрофон

Из завалов старых сетевых карт, ISA-видеоадаптеров и ЭЛТ-мониторов я извлек пожелтевший от времени микрофон Genius, который мог похвастаться тем, что лично знаком с процессорами Intel 80386 и компьютерными мышами, которые для подключения использовали COM-порт. Микрофон был исправен и прекрасно работал при условии, если диктор говорил прямо в него. Но если говорить в подобный микрофон с расстояния в 50 см или того пуще в метр, что часто случается на практике с домофонами, то разобрать слова говорящего было весьма непросто. Для бюджетного решения, пожалуй, допустимо, но я хотел большего...

Я понял, что ни этот, ни другие микрофоны подобного плана не способны качественно и детально передать звук в требуемых условиях и необходимо другое решение. Другое решение - это специализированные микрофоны со встроенными усилителями и АРУ. Например, серия микрофонов Шорох или Stelberry. Я сходил в ближайший магазин товаров для систем безопасности и вернулся оттуда с микрофоном Stelberry M-40. Мне кажется Stelberry по определению должен был подружиться с Raspberry.

Stelberry M-40
Скрин с сайта производителя. А цену я замазал, чтобы не напугать читателя

Так как микрофон активный, ему необходимо питание. Для питания M-40 можно использовать постоянный ток с напряжением от 7,5 до 16В. Подключив питание 12В, я с вожделением примкнул к трубке телефона и осторожно сказал в микрофон "Раз, раз"... Но в телефонной трубке, на которую я позвонил с моего макетного SIP-домофона я услышал только "Хррррззз, хрррз". Было очевидно, что микрофонный вход перегружен. Уровень сигнала слишком высокий.

Stelberry M-40 имеет регулировку чувствительности микрофона. Я выкрутил винт регулировки до минимума и снова казенным голосом произнес "Раз, раз"... Стало несколько лучше, но проблему перегрузки входа это не решило. Уровень снова слишком высокий.

Тогда я полез в системный микшер - запустил alsamixer. Нажимаем F6 для выбора звуковой карты и выбираем USB Advanced Audio Device. Но этого недостаточно. Необходимо нажать F5, чтобы отобразился ползунок "CAPTURE". Именно он (а не ползунок Mic) отвечает за усиление входного сигнала. Выкручиваем ползунок в ноль!

alsamixer и подключение микрофона Stelberry M-40
Убираем усиление входного сигнала

"Раз... раз... раз" - в полуметре. Никакой перегрузки. "Раз" - в метре... "Раз" - в 3 метрах... Затылок почувствовал прохладную поверхность оштукатуренной стены кабинета. Даже если я едва различимым шепотом произносил слова в 3 метрах от микрофона, в трубке телефона были отчетливо слышны все слова так, как будто я говорил прямо в ухо. Вот это да! С таким микрофоном я буду слышать все, что творится за соседским забором. Конечно, перебор, но должно же быть что-то уникальное в моем изделии. В то же время если истошно вопить нечеловеческим голосом прямо в микрофон, то АРУ микрофона отрабатывал превосходно, мгновенно снижая уровень сигнала до приемлемого уровня.


Про управление

Хорошо. Вопрос со звуком почти решен. У нас есть консольный SIP-клиент, который управляется нажатием кнопок на клавиатуре. Но что теперь? Как этим клиентом управлять кнопкой вызова домофона? Ведь у него нет клавиатуры, а даже если бы и была, гость вряд ли догадается набрать m -> sip:102@192.168.0.251. Можно, конечно, повесить на цепочке в целофановом пакете талмуд с крупной надписями RTFM и "ламерз маст дай". Вот это было бы по-гиковски. Но нет. Я еще не отрастил себе бороду для таких суровых проделок.
Выхода было два: а) изменить исходники pjsua; б) как-то "эмулировать" нажатие клавиш клавиатуры.

Мне совсем не хотелось глубоко лезть в исходники pjsua и модифицировать его код. Поэтому я решил пойти простым путем - конечно же, эмулировать клавиатурный ввод команд пользователя с помощью скрипта. Не стоит забывать, что мы имеем дело с Raspbian, а это настоящий Linux. А как в любом Linux'е, в нем есть команда перенаправления вывода "|". Это команда служит для того, чтобы перенаправить вывод одной программы на ввод другой. И как же это работает?

Для наглядности установим PHP. На самом деле можно использовать любой способ организации вывода: Perl, Python, Bash, все, что угодно. Но мне проще было взять PHP.

sudo apt-get install php7.0-cli

Теперь напишем простой скрипт sip-control.php

<?php
sleep(2);
//Making new call
echo "m ";
usleep(200000);
echo "sip:102@192.168.0.251 ";
?>

Если теперь мы запустим pjsua так, как указано ниже, то через 2 секунды клиент позвонит по номеру 102 - сделает то, что мы запрограммировали в скрипте. Таким образом одна программа может управлять другой. Волшебство. Даже круче, чем микроволновка.

php sip-control.php | pjproject-2.6/pjsip-apps/bin/pjsua-armv7l-unknown-linux-gnueabihf --config-file test.conf --playback-dev 9 --capture-dev 8

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


Про кнопку

Для вызова абонента у SIP-домофона должна быть кнопка. У тех же друзей из солнечной страны, где с деревьев свисают панды, владеющими кун-фу, я приобрел влагозащищенную кнопку и подключил ее к гребенке GPIO Raspberry Pi. Я решил, что не буду устанавливать всякие специализированные библиотеки для работы с GPIO, а заюзаю то, что уже доступно из коробки. Из коробки доступно достаточно многое. Кнопку я подключил к GPIO 17. Конфигурирование пина следует выполнить следующим образом из консоли.

echo 17 > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio17/direction

Далее я доработал внешний скрипт управления SIP-клиентом, который при нажатии на кнопку осуществлял вызов абонента.

<?php

$old_state = 0;

while(true)
{

    $state = file_get_contents('/sys/class/gpio/gpio17/value');
    if ( $state != $old_state)
    {
        if ( $state == 1 )
        {
            if ( file_exists('/tmp/dp-call.tmp') )
            //Hangup!
            echo "h ";
            else
            {
                //Making new call
                echo "m ";
                usleep(200000);
                echo "sip:102@192.168.0.251 ";
            }
        }
        $old_state = $state;
    }
    usleep(20000);
}
?>

Вот и все программирование! Правда просто? Не совсем... Опытный глаз заметит странную проверку наличия файла dp-call.tmp
Дело в том, что при нажатии кнопки мы должны вызвать абонента с номером "102". Но что будет, если пользователь нажмет кнопку повторно. Следуя здравому смыслу и интуитивно понятной логике повторное нажатие должно завершить звонок. Но как этого добиться, ведь у нас нет никакой обратной связи от программы pjsua. Мы можем передать туда любой вывод, но как получить надежную обратную связь? Анализировать консольный вывод pjsua показалось мне не слишком убедительным решением. Поэтому кряхтя и охая от осознания необходимости нарушить девственность кода, я все же полез в исходники pjsua, написанные на C.

В функции ui_make_new_call() я добавил следующий код

FILE *fp = NULL;
fp = fopen("/tmp/dp-call.tmp" ,"a");
fclose(fp);

А в функции ui_hangup_call() вот этот код

remove("/tmp/dp-call.tmp");

Вот теперь скрипт управления по наличию или отсутствию файла dp-call.tmp точно будет знать состояние SIP-клиента. Когда надо (нет активного звонка) при нажатии кнопки скрипт будет давать команду звонить, а когда надо (активный звонок) - вешать трубку.


Про считыватель

Пожалуй, SIP-домофон нельзя считать настоящим, если в нем нет считывателя ключей. Сперва я думал взять MegaD-2561, ведь в нем уже все реализовано "аппаратно", но остановило несколько обстоятельств. Если подключать считыватель к контроллеру MegaD-2561, который расположен в доме, это снова будет означать лишние провода, от которых я так хотел уйти. Располагать MegaD-2561 вместе с Raspberry Pi в одном корпусе, это все равно что смешивать сливочное масло с крестьянским. Конечно, кашу маслом не испортишь, но все же это явный борщ, причем наваристый. Раз так, надо подключить считыватель напрямую к портам RPi.

Самый простой с точки зрения программной реализации вариант - использование считывателей с интерфейсом Wiegand. Но какое использовать ПО? Я было дернулся искать готовое ПО, но под руку то и дело попадались всякие монстробиблиотеки с требованием установки других монстробиблиотек для всеобъемлющей работы с GPIO и все такое. Грустил я недолго, минуты полторы. Я решил, что напишу свой велопродукт. Не первый и, как говорится, не последний.

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

Так как в sysfs нет возможности работать с прерываниями (или я ошибаюсь?) я решил написать скрипт не на своем любимом .... (добавить крепкое матерное выражение по вкусу) PHP, а на православном Python'е с использованием RPi.GPIO.

Я подключил считыватель к пинам 22 (DATA0) и 27 (DATA1) и написал небольшую программу.

#!/usr/bin/env python2.7  
import RPi.GPIO as GPIO  
import sys
import time
GPIO.setmode(GPIO.BCM)  
      
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)  

data = "";
cnt = 0;

def get_key():
    global data
    global cnt
    print " " + hex(int(data[1:-1], 2))
    cnt = 0
    data = ""

def wg_data(channel):  

    global data
    global cnt
    if channel == 22:
        data += "0"
    else:
        data += "1"
    cnt += 1
    if ( cnt == 26 ):
        get_key()
    
    while not GPIO.input(channel):
        x = 0

GPIO.add_event_detect(22, GPIO.FALLING, callback=wg_data)
GPIO.add_event_detect(27, GPIO.FALLING, callback=wg_data)

try:
    while True:
        time.sleep(5)
except KeyboardInterrupt:  
    print "Quit"
GPIO.cleanup()           # clean up GPIO on normal exit

Вот этот несложный код - реализация полноценной работы с любым считывателем, работающим по протоколу Wiegand-26. Не верится? А вот!
Теперь при поднесении ключа к считывателю на экране отображается его идентификатор. Остается только добавить проверку ключа на наличие в списке разрешенных.

Важно! В подавляющем большинстве считывателей напряжение уровней интерфейса Wiegand - 5В, тогда как напряжение логических уровней RPi составляет 3.3В. Подключать такие считыватели напрямую, без согласования не рекомендуется. Это может привести к сбоям в работе RPi и даже к выходу процессора из строя. Простейшее однонаправленное согласование можно обеспечить с помощью 2-х копеечных диодов 1N4148 или КД522. Вот схема подключения. Вместо MegaD-2561 в данном случае RPi.

 

Про камеру

Так как в качестве платформы была выбрана "малинка", вопрос с камерой решался достаточно просто. Можно было использовать любую камеру, предназначенную для подключения к RPi через стандартный разъем. Такие продаются по цене от 350 руб. Фактически же я выбирал из двух вариантов. Первый вариант выглядел очевидным: 5 мегапискельная камера с сенсором OV5647 с функцией "ночного видения", то есть возможностью автоматически отключать ИК-фильтр и использовать ИК-подсветку. Второй вариант не столь очевиден: 8 мегапискельная новая камера с сенсором Sony IMX219. Эта камера выпускается в двух отдельных разновидностях: с ИК фильтром и без него. Камера с ИК фильтром обеспечивает нормальную цветопередачу при достаточном видимом освещении, но с ней бессмысленно использовать ночную ИК-подсветку. Такая камера слепа ночью. Камера без ИК фильтра позволяет подсвечивать объект ИК-диодами ночью, но при нормальном освещении цветопередача такой камеры - неоцинкованная жесть. К сожалению на момент написания статьи камер с сенсором IMX219 и автопереключением ИК-фильтра не предлагалось. Недолго думая, я решил заказать новую 8 мегапиксельную камеру с ИК-фильтром отчасти потому, что ночью территория возле калитки у меня освещается и подсвечивать ее ИК-диодами в общем-то не требовалось, а отчасти потому, что все мы простые грешники падки до мегапикселей. Заодно я хотел проверить, как работает эта камера в условиях низкой освещенности. Поменять же камеру в случае необходимости не составило бы большого труда.

Библиотека PJSIP поддерживает передачу видео через SIP-протокол, но так как все IP-телефоны в доме достались мне в наследство от прадеда и не снабжены 12 дюймовыми Full-HD дисплеями, эту проблему я решил оставить на потом. А пока настроить RPi таким образом, чтобы доступ к камере был через Web-интерфейс как с компьютеров и мобильных устройств дома, так и через Интернет. Ведь вместо того, чтобы менять антиквартный IP-телефон, рядом с ним завсегда можно повесить какой-нибудь дешевый планшет с открытым браузером Safari. К тому же в Web-интерфейсе рядом с картинкой от камеры можно расположить какие-нибудь полезные кнопки: "Открыть калитку", "Включить поливалки", "Подать напряжение на забор". А ведь есть же еще Web-RTC...

Одним словом, организовать доступ к камере RPi совсем несложно.

sudo raspi-config
git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
cd RPi_Cam_Web_Interface
./install.sh

С помощью raspi-config нужно включить камеру в настройках RPi, а дальше скачать и установить так называемый "RPi Camera Web Interface". Скрипт установщик сам поставит все необходимые пакеты, вирусы, ПО для майнинга криптовалют и наилучшим образом произведет настройку всего это набора. Это, вероятно, самая простая и приятная операция во всей этой дикой затее.
Проверка...

RPi Cam Control
Кто сказал, что Крылья в $@пе? Крылья - лучшие в Европе!!!

Со всех своих камер наблюдения раз в минуту я собираю одиночные снимки и сохраняю в архив. Отдельные кадры не требуют много ресурсов и в отличие от видеоархива хранятся вечно для истории.
Я решил, что нужно делать такие же снимки с камеры вызывной панели с помощью утилиты raspistill, которая будет запускаться планировщиком cron ежеминутно.
Но и здесь не обошлось без особенностей. Домофон обращен на юг, и половину кадра днем занимает небо с ослепляющим камеру солнцем. Сильнейшая контрзасветка искажает автозамер и расчет экспозиции в результате чего нижняя и самая ценная половина кадра с дорогой, соседским домом, бегающей собакой по кличке Пират и покосившейся от времени березы получалась фактически черной.
И, напротив, ночные снимки, сделанные с параметрами по умолчанию, мало чем отличались от квадрата Малевича. Да на известной картинке деталей даже больше.
К счастью, у raspistill есть масса параметров, с помощью которых можно повлиять на получаемое изображения. Я решил подобрать оптимальные параметры и предусмотреть программное переключение режима день/ночь. А чтобы знать, когда наступила ночь, RPi будет запрашивать у сервера значение датчика освещенности MAX44009, подключенного к MegaD-2561. Вот в таких случаях и проявляются преимущества интеграции всех железок в единую систему. Также я решил накладывать на изображение текущее время. Чтобы все это чудным образом заработало, я слепил скрипт для оболочки bash.

light=$(curl -s http://192.168.0.250/scripts/check-light.php)
temp=$(vcgencmd measure_temp)
if [ $light -lt 10 ]
then
    raspistill -o /dev/shm/Monitor2.jpg -w 1000 -h 751 -sh 100 -ss 1000000 -ag 6 -ae 18,0xffffff,0x000000 -a 4 -a "%X $temp" -t 3000
else
    raspistill -o /dev/shm/Monitor2.jpg -w 1000 -h 751 -sh 99 -drc med -co 7 -sa 5 -ev 9 -ae 18,0x000000,0xffffff -a 4 -a "%X $temp" -t 2000
fi
scp /dev/shm/Monitor2.jpg www@192.168.0.250:/var/www/snap

Прежде всего, я выкрутил sharp (-sh 100), так как иначе при ресайзе до 1000x751, изображение с модной 8-мегапиксельной камеры было ну очень мутными. Делать снимки с максимальным разрешением я не стал, так как для архива этого не требуется, а детализация картинки с полным разрешением не сильно выше. Далее для дневного режима я включил режим DRC (dynamic range compression) и установил EV (компенсацию экспозиции) в +9. И хотя картинка приобрела характерную для HDR винтажность, нижняя недосвеченная часть наконец-то проявилась. При этом небо не стало белым пятном. Вполне отчетливо вырисовывались облака. Супер. Для ночного режима я значительно увеличил shutter speed (-ss 1000000) и аналоговое усиление (-ag 6). Результат очень впечатлил. Прекрасные, четкие, цветные(!) снимки ночью. Но, оговорюсь, территория подсвечивается 220Вт натриевой лампой, выдающей под 20 тыс люменов. Время для ночного и дневного режима накладывается по-разному. Днем черный шрифт на белом фоне. Ночью наоборот. Кроме того, на изображение кроме времени накладывает информация о температуре центрального процессора. Не знаю как для домочадцев, я для оторванного гика крайне полезная информация. В общем мне понравилась и работа камеры и обилие опций программы raspistill. Вряд ли всего этого можно добиться при использовании готовых заводских решений...

 

Про Wi-Fi

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

Настройка Wi-Fi не вызвала больших сложностей. Во избежании различных непредвиденных ситуаций я, разумеется, прописал интерфейсу статический IP-адрес.

Редактируем /etc/network/interfaces и добавляем следующий блок:

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
iface default inet static
        address 192.168.0.233
        netmask 255.255.255.0
        gateway 192.168.0.250

Теперь отредактируем /etc/wpa_supplicant/wpa_supplicant.conf

country=RU
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="SUN123"
    psk="kluchotkvartirygdedengilezhat"
}

Ну, кажется, все. if-up wlan0 это подтвердил.
Несколько слов о качестве Wi-Fi связи. У меня дома не одна точка доступа. Их четыре. Все точки Unifi AP объединены в общую сеть. Я писал об этом в отдельной статье.
Внутри дома никаких проблем с сигналом нет. Но калитка находится на расстоянии 10 метров от дома. Штатной встроенной антенны RPi не хватало. Поэтому было решено припаять разъем для внешней.

RPi external  wifi antenna

Уровень сигнала вырос, но не очень значительно. Ожидал большего. В любом случае, этого уровня хватило для передачи видео и тем более голоса.
Однако в процессе эксплуатации выяснилась одна занятная вещь. RPi3 регулярно и с завидным упорством переключался от ближней к нему точки доступа с уровнем сигнала в -70дБ на самые удаленные точки с уровнем сигнала в -85дБ. Причем соединившись с самой удаленной точкой и фактически теряя связь, "малинка" твердо стояла на своем, не желая перепрыгивать на точку доступа с хорошим сигналом. Помогало только нажатие кнопки "reconnect" в ПО Unifi Controller. Зачем RPi так делала, и кто вообще во всем этом виноват сказать сложно. При этом производитель Unifi AP компания Ubiquiti который год демонстративно игнорирует миллионы запросов пользователей на добавление фичи в ПО контроллера, которая бы позволяла жестко привязывать определенного клиента к нужной точке. Такой опции на момент написания статья нет. У решений от TP-Link из Шэньчжэня есть, а у калифорнийской конторки с доходом под миллиард нет...
Но выручила опция wpa_supplicant в настройках raspbian, которая называется bssid_blacklist. С помощью этой настройки можно через запятую прописать MAC-адреса точек, к которым подключаться не следует. Это сработало!
Да, есть еще опция bssid, но она довольно опасная. При любых проблемах с конкретной точкой, прописанной в настройках, нужно будет снимать и разбирать панель, подключаться через LAN. Иначе достучаться до RPi уже будет нельзя. Я не рискнул.

 

Про корпус

Любая поделка в стиле DIY - это просто кучка транзисторов, меди, олова, термоклея, шпагата, изоленты, двухстороннего скотча и какой-то там матери, если у нее нет корпуса. Корпус - это самый важный, я бы сказал, ключевой элемент всей конструкции. Я долго размышлял на эту тему. Но никак не мог подобрать такой вариант, для которого можно было бы обеспечить герметичность для уличного использования и который бы вместил все те запчасти, которые я собрал. Ничего. Ничего не подходило. Нужно было также иметь ввиду, что металлический корпус, если антенна находится внутри, полностью блокирует все радиосигналы. Но однажды я разгулировал по своему чердаку, пиная из угла в угол всякий хлам, и запнулся о кусок какого-то пластика. О! Да это может пригодиться!

SIP doorphone case
3D-принтер? Нет, не слышал...

Дешево и очень сердито! Кабель-канал ДКС InLiner формата 90х50. Остался от сборки какого-то шкафа. Выглядит нарядно.
Из описания с официального сайта ДКС.

Цвет: Чисто-белый
Не содержит (без) галогенов: Нет
Конструкция задней стенки (внутр. сторона): Прочее
Защитное покрытие поверхности: Прочее

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

SIP-домофон. Вызывная панель
Наш ответ Dahua

По-моему, по сравнению с iPhone 5 выглядит неплохо. В верхней части размещена 8Мп-камера, в центре кнопка (с подсветкой), ниже считыватель стандарта Mifare. А надпись внутри короба "Сделано в России" сразу прибавляет 18 очков к крутости. Импортзамещение, чо...

В нижней торцевой заглушке я просверлил отверстия для динамиков и микрофона. Кажется, забыл написать про динамики. Я приобрел пару динамиков DXI30N-A (0,5Вт) 8Ом, которые подключил к выходу внешней звуковой карты без всякого дополнительного усиления. Громкость более, чем достаточна. Даже пришлось немного убавить.


Про стекло камеры

Еще одной инженерной задачей было герметизация камеры. Мой чердак может предложить решение почти любой проблемы, но в данном случае он спасовал. Все те стеклышки, которые я примерял, были либо нелепы, либо искажали изображение. Я даже приобрел закаленное стекло для часов (кажется Joaillene Manchette), но не придумал, как его аккуратно и качественно закрепить. Спустя какое-то время меня осенило.

Стекло камеры смартфона
Оригинально...

- У вас есть стекло для камеры телефона?
- Для какого телефона?
- Для всех!

Спасибо продавцам, что не вызвали санитаров.
А фактически просто изумительно подошло стекло задней камеры для iPhone 8 (серебро). Из протестированных мной образцов оно оказалось самым прочным и самым износостойким. Да, я их специально гнул, давил и шкрябал гвоздем. Стекло легко (со второй попытки) вклеилось в круглое отверстие диаметром 9,7мм.


Про покраску

Я был бы не я, если бы оставил корпус своего изделия белоснежным. Чисто конкретно белая вызывная панель на кирпичном заборе? Нет, увольте, цвет должен быть классическим. Довольно оригинальничать!
Классика современного домофонного панелестроения диктует нам такие цвета как полночно-серый, молотково-бронзовый, кирпично-коричневый, черно-сапфировый. С этими мыслями (каждый в душе ходожник) я пошел в ближайшее отделение Леруа-Мерлен, где купил это.

Текстурная краска Rust-Oleum Multicolor
Rich & Elegant - для сельской местности сойдет

Это продавалось почему-то с большой скидкой. И вместо 850 руб, как другие эмали этой серии, стоило 250 руб. В чем тут подвох не понял. Надо было брать три.
На глянцевом пластике без всякой предварительной обработки эта штука держится довольно хорошо. Пальцем стереть не получится. Даже острым предметом царапается с трудом (царапал). Краска имеет приятную шероховатую фактуру, а окрашенное изделие на мой высокохудожественный вкус смотрится просто @$%@$^о! Лучше выглядит только танк Т-80У.

SIP вызывная панель домофона
WiFi SIP Doorphone. Результат

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

SIP вызывная панель своими руками
В натуральном виде смотрится конечно же лучше, чем на фотографии. Рустикально

Кстати, считыватель Mifare поддерживает работу не только с обычными брелками от подъездов. На китайских площадках продаются так называемые NFC-метки. Например NTAG216 (ISO14443A, 13.56MHz) в виде стикеров. Они также будут работать со считывателем. Да что стикеры. В Интернете недорого (всего за $99) можно купить биосовместимый имплант с NTAG216, который вживляется под кожу. Достаточно поднести руку, чтобы почувствовать себя роботом Вертером: "Ха-ха-ха-ха-ха"...


Серьги в ушах никого же не удивляют...

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


Update от 2019.05.14

Я переживал по поводу перегрева домофона в условиях летней жары. Еще не лето, но столбик термометра уже поднимался до 33 градусов. Домофон висит на южной стороне под прямыми солнечными лучами. Температура процессора не превышала 76.8 градусов. Результат вполне приемлемый, SoC BCM2837 допускает нагрев до 85 градусов. Устройство не тормозит и не зависает.

Температуру процессора можно проверить с помощью следующей команды.

vcgencmd measure_temp

Вызывная панель также успешно прошла испытания ливневыми дождями.

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2018-12-19 22:26:47 | Ruslan
Просто шикарно! Отдельное спасибо за стиль изложения, как всегда с большой самоиронией и юмором.


2018-12-20 06:02:57 | Алексей
Андрей, спасибо за статью! Подскажите - почему не сделали ИК подсветку? И можно для чайников подвести итог в статье с заголовком "Как же это все вместе работает?" - тиап "Пришел гость. увидел эту штуковину...раз кнопка подсвечивается, значит надо ее нажать. После нажатия кнопки происходит ...и т.д." Мне интересно - как Вы в реальности принимаете вызов домофона - на SIP-телефон, установленный на входе, на планшет в гостевой, на сотовый? Каким образом реализовано видеоотображение гостя? На смартфоне у Вас какое-то приложение для SIP-телефонии чтобы поговорить с гостем, который пришел. А как, например, открыть калитку/ворота садовнику если Вас нет дома, но он пришел?


2018-12-20 12:05:41 | Andrey_B
Алексей, по поводу ИК-подсветки. У меня почти над калиткой висит натриевая лампа со светоотдачей в 19000 люмен. Ночью довольно светло. Кроме того, я не хотел в рамках данного эксперимента усложнять конструкцию и делать дополнительные отверстия в корпусе. Общая герметичность в данном случае играет не последнюю роль. Да и картинка в таких системах стоит скорее на втором плане после голоса. Но если кто-то захочет повторить конструкцию, не вижу сложностей.
По поводу того, как это работает. Сейчас вызывными панелями никого не удивишь и не испугаешь. Любой человек понимает, что эта штука нужна для связи с хозяевами. Поэтому кнопку в данный момент я подсвечиваю только в момент вызова, а не всегда. Это выглядит эффектно. А постоянно светящаяся кнопка будет только привлекать лишнее внимание. Гость же, думаю, разберется, куда давить.
Это SIP-вызывная панель. И это основная фишка. Поэтому вызов обрабатывает Asterisk. В принципе сервер может направить звонок куда угодно. На SIP-телефон, на мобильный, на планшет. Причем делать это в зависимости от условий. Например, если дом на охране, отправлять звонок на мобильный. Если дома есть люди, на SIP-телефон. Немного о моих настройках Asterisk я писал в предыдущей статье. В данный момент звонок с домофона отправляется на отдельную линию одного из SIP-телефонов со своим рингтоном (Angry Birds) и настройками громкости. И этот звонок я могу перехватить с любого SIP-телефона в доме, нажав стандартные *8 (перехват звонка). Очень удобно. А могу набрать на другой линии городской или мобильный номер и соединить его с калиткой. В этом вся сила SIP и Asterisk. Хотите еще возможностей? Asterisk может записывать голосовые сообщения, когда никого нет дома или говорить: "Извините, хозяева сейчас спят, приходите позже", если какой-то ночной гость решит позвонить в 3 утра (при этом камера запишет на всякий случай видео с этим "гостем"). Реально полезная возможность по сравнению с подъездными домофонами, когда тебя может разбудить алкаш, по ошибке ткнувший не ту кнопку.
По поводу видео чуть сложнее. SIP позволяет передавать видео. Но у меня пока нет таких SIP-телефонов. Поэтому в данный момент проще просто установить планшет с браузером. Кстати, на планшете также можно запустить SIP-клиент. В общем по поводу видео - это тема для отдельного интересного разговора.
По поводу того, как открыть калитку. В предыдущей статье, ссылку на которую уже давал, я описал настройку Asterisk, когда в момент разговора, чтобы открыть калитку, нужно просто нажать кнопку "0" на клавиатуре телефона. Можно это сделать и через Web-интерфейс моего дома, даже если никто не звонил. Это простая задача.


2018-12-21 21:14:42 | Григорий
Beward DS06M вполне доступный домофон.


2018-12-22 11:10:02 | Andrey_B
Григорий, существуют ли в природе готовые SIP-вызывные панели? Конечно. Сколько угодно.
Но возьмем Beward DS06M
1. Цена 14-15 тыс. рублей. Мой вариант при желании можно собрать за 5-6 тыс. рублей. В 2-3 раза дешевле.
2. Мой вариант поддерживает не только Ethernet, но и Wi-Fi. Меньше проводов и плюс к электрической безопасности оборудования дома. DS06M - только Ethernet.
3. В моем варианте есть считыватель. Я могу установить считыватель Mifare, EM-Marine или даже оба! У DS06M нет даже считывателя!
4. Полный доступ к настройкам и софту. Никаких ограничений вообще. Это основное преимущество и основной недостаток самодельных систем.
В серию, на поток, "кому-то", чтобы не болела голова - только готовое проверенное заводское решение с отлаженным софтом.
Себе, ради удовольствия от процесса, чтобы получить опыт и новые знания, в качестве эксперимента, чтобы сделать что-то, чего никогда не было у других и в такой конфигурации, которая нужна только мне - допустимо и самодельное устройство. В тайтле сайта не зря же присутствует словосочетание "своими руками". Оно про это самое.


2018-12-22 11:41:08 | ДмитрийК
А питание подводишь сразу 5В (в смысле я не заметил в коробочке блока питания, что бы можно было подключить по 220)? А какое расстояние и какойпровод используется? И (возможно я невнимательно читал) не вижу витой пары, т.е. связь с сервером по WiFi?


2018-12-22 13:41:25 | Andrey_B
ДмитрийК, питание подвожу 12V DC. Это безопаснее, чем 220В и проще. Внутри стоит преобразователь 12В-5В. В статье об этом написано. И на фотографии конструктора этот конвертер есть. Синяя плата слева от RPi.
Я имел и имею возможность подключиться по Ethernet (UTP), статический адрес прописан, только воткнуть кабель, но принципиально захотел использовать Wi-Fi. Удобнее - к панели подходит только черный тоненький провод питания 12В, а не относительно толстый UTP с RJ-45. Безопаснее с точки зрения работы домашнего сетевого оборудования (хотя, конечно, есть устройства защиты Ethernet). В идеале солнечная панель на навершии столба + аккумулятор. Тогда вообще никаких проводов не потребовалось бы. Полная гальваническая развязка.
По Wi-Fi все волшебно работает. Корпус пластиковый, а потому никаких проблем со связью. Антенна внутри.


2019-03-15 22:52:28 | Siorinex
Ну я даже не знаю: в пластиковом корпусе размещать малину с камерой и ридером ключей?! Идея хороша, но вот железки я-бы таки разделил...


2019-03-16 09:36:05 | Andrey_B
Siorinex, а в чем проблема размещения в одном корпусе миниПК, камеры и считывателя (кстати, его корпус тоже пластиковый)? И что вы понимаете под разделением железок?


2019-03-16 09:50:49 | Siorinex
Andrey_B, в первую очередь то, что тупо стремно за воротами оставлять все это не в антивандальном корпусе.
. Снаружи оставить камеру, ридер, микрофон и динамики с кнопкой, а комп и питание - перенести на другую сторону забора - не???


2019-03-16 11:15:38 | Andrey_B
Siorinex, ну это, наверное, вопросы уже не технического плана. Если речь идет о реальном вандализме, то никакой антивандальный корпус не спасет. Разбить, повредить, оторвать можно все, что угодно. А в целом пластиковый корпус, который я применил, довольно крепкий. Кроме того, не думаю, что цена малинки стоит того, чтобы разделять устройство на два корпуса и снова тянуть провода, получив потенциальные проблемы с качеством. Если жить в неблагополучном районе, возможно, да. А у нас я бывало по забывчивости оставлял гараж открытым на полдня. Кроме собак, кошек и мышей никто этим не интересовался. ;)
От машин, стоящих возле дома, можно открутить гораздо более ценные детали, да и от вандализма они вот совсем не защищены... А тут все-таки камера, которая может постоянно вести запись. На месте потенциального вандала, я бы подумал, прежде чем что-то делать.


2019-03-16 11:26:14 | Siorinex
Ну, не знаю: у нас вполне благополучный подъезд и звонками даже не хулиганят, не считая спамеров и мошенников, но все-же как-то оно стремно...


2019-03-16 12:33:31 | Andrey_B
Siorinex, предложенное решение скорее для частного дома. Подъезды - это отдельная тема. Для подъездов, наверное, считыватель с кодовой панелью нужен. Ну а в целом "стремно" - термин, который лежит за рамками этого сайта. Когда для себя и своими руками - ничего не стремно, все допустимо. Ставят же две турбины на "копейку" и коробку от BMW. Для кого стремно, а для кого - норм! ;)


2019-03-19 09:13:42 | 50cmd
Andey_B, интересует как все работает в морозы?


2019-03-19 12:02:18 | Andrey_B
50cmd, нормально. Меня больше волнует, как конструкция будет работать в жару, не будет ли перегрева. Нынешнее лето покажет.


2019-03-25 13:04:48 | Владимир
Как дождь..? Мороз, снег...


2019-03-25 18:24:06 | Andrey_B
Мороз и снег - без проблем, а как будет в дождь - посмотрим летом. Это в сущности вопрос корпуса. Если не гнаться за красивым дизайном, то можно все собрать в коробке IP66 - проблем с осадками точно не будет.


2019-04-12 10:38:43 | Павел
Классная идея и реализация !
думаю Raspberry Pi Zero здесь лучший выбор, меньшая цена , более слабый процессор ( одно ядро против 4 , но для таких задач будет вполне достаточно ) и в итоге меньший нагрев.


2019-04-12 12:04:57 | Andrey_B
Павел, полностью согласен. Действительно Pi Zero позволит здорово сэкономить. Но и 1.2ГГц взрослой версии могут быть востребованными.


2019-04-15 10:44:54 | Andrey_B
Кстати, по поводу нагрева. Провел пару экспериментов. При температуре окружающей среды 25 градусов и в отсутствии прямых солнечных лучей процессор RPi нагревается до 55-56 градусов. Но работает он в нормальном режиме не на 1,2ГГц, а всего-лишь на 600Мгц. Дело в том, по умолчанию в RPi установлен профиль "ondemand", когда частота процессора повышается только при нагрузке. Однако снижение минимальной частоты с 600МГц до 400МГц, а также отключение 2 ядер из 4-х не приводит к уменьшению температуры чипа в режиме холостого хода. Даже на полградуса не снижается. Поэтому не факт, что RPi Zero будет греться меньше. Говорят, что отключение LAN-чипа дает больший эффект, но я его отключить не могу, так как в этот чип также интегрирована поддержка USB. А у меня внешняя звуковая карта подключается через USB.


2019-04-21 13:57:43 | Павел
Андрей , по поводу нагрева , согласен. Нужно будет посмотреть как zero будет себя вести во время работы.
Сегодня собирал pjsip под pi zero w , потратил пол дня , что бы заставить работать pjsua
Собирал версии 2.6, 2.7.2 с разными флагами комилияции, один результат, при запуске pjsua даже с snd_dummy и реальной звуковухой pjsua валилась в segfault.
Версию 2.8 собирал с ./configure --disable-video --disable-ffmpeg --disable-v4l2 --disable-sdl --disable-openh264 --disable-libwebrtc, больше ничего не менял.
Собралось , работает.
Обработку нажатия кнопки решил сделать на bash, что бы ничего лишнего не ставить. Логика такая, нажатие кнопки, проверяем запущен ли pjsua , если нет запускаем , если да ничего не делаем. Pjsua отвалится после 60 секунд , если никто не ответит ( в диалплане астериска )
Я не нашел как заставить pjsua закрываться после hangup, помогла опция --auto-play-hangup , не совсем корректно, pjsua выходит с ошибкой, но это работает .

!/bin/bash
BUTTON=23
setup
gpio -g mode $BUTTON up
while true ; do
if [ `gpio -g read $BUTTON` -eq 0 ] ; then
pidof pjsua
if [ $? -eq 1 ] ; then
pjsua --config-file /home/pi/my.conf --playback-dev=18 --capture-dev=14 --log-level 0 --no-cli-console --auto-play-hangup sip:701@192.168.2.5
fi
fi
sleep 1
done


2019-04-21 14:05:14 | Павел
И еще, после окончательной настройки, sd карту лучше перевести в read-only
Вот здесь хорошая статейка как это сделать https:/learn.adafruit.com/read-only-raspberry-pi/overview


2019-04-21 18:48:43 | Павел
Добавил вот такую конструкцию в строку вызова pjsua
(sleep 180; echo q) | pjsua --config-file /home/pi/my.conf --playback-dev=18 --capture-dev=14 --log-level 0 --no-cli-console --auto-play-hangup sip:701@192.168.2.5
Это на тот случай , если домашние забыли трубку положить, и вся улица слушает что происходит дома . Через три минуты разговор разорвется.


2019-04-21 22:27:59 | Павел
Небольшое дополнение , строка должна выглядить так, иначе pjsua будет висеть 180 секунд после hangup
(sleep 180; echo q) | ( pjsua --config-file /home/pi/my.conf --playback-dev=18 --capture-dev=14 --log-level 0 --no-cli-console --auto-play-hangup sip:701@192.168.2.5 ; PID_PJ=`p
idof sleep 180` && kill $PID_PJ )


2019-04-22 22:05:07 | Дмитрий
Ну хорошо, нажал гость кнопку, зазвонил телефон, вы пообщались. А дальше? Как замок открыть дистанционно? Ничего об этом в статье не увидел. Или бегаете вручную открывать?


2019-04-22 22:38:34 | Павел
А дальше конфигурируем asterisk на отработку какой-нибудь кнопки на телефоне , во время разговора , для запуска определенной команды направленной контроллеру замка.


2019-04-23 10:12:15 | Andrey_B
Дмитрий, как уже написал Павел, открытие замка калитки у меня настроено в Asterisk. Как именно это настроено я писал здесь. Достаточно на телефоне в любой момент времени нажать "0" и замок калитки откроется. Это удобно.


2019-04-26 13:08:13 | Павел
Андрей, подскажите пожалуйста, на считывателях IronLogic CP-Z-2 с протоколом Wiegand, по паспорту питание 8 - 18 вольт. Если питать его напряжением 12 вольт, та схема согласования с диодами , будет работать ?


2019-04-26 16:39:57 | Andrey_B
Павел, да, будет. У меня именно так и работает. А вот совсем без согласования работает плохо. Для RPi обязательно нужно.