|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> Шелезяки
—> Охранная система на FreeBSD+LPT
Охранная система на FreeBSD + LPT c видеорегистрацией
Автор: -ZG-.
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт с возможностью ведения видеорегистрации при срабатывании/работе охранных устройтсв, отправки смс, ведением лога событий устройств в mysql базу.
Общая схема подключения системы:
Задача:
Сделать так, чтоб при наличии активности (изменении объема / теплового излучения) в помещении, или еще каком событии на винт сохранялись jpeg кадры с ip Камеры.
Велись логи срабатывания охранных устройств.
Велись логи открытия и закрытия входной двери(ей).
Мониторинг текущих состояний охранных устройств.
Выполнение скриптов при изменениях состояний охранных устройств.
Инструменты:
FreeBSD + MySQL server
LPT порт
программа lptmon
IP-Камера с веб мордой (у меня Axis-205)
Объемник
Паяльник, припой, канифоль =)
Провода
Прямые руки
Об объемнике:
Такая вот штука, питание 9..15в так что от блока питания компа работает на ура.
Имеет два контакта в качестве сигнального выхода, по умолчанию замкнуты. разрываются при появлении активности. Другие объемники работают по этому же принципу, Если снять с него крышку, там будет плата, на ней клеммы для подключения питания и 2-3 перемычки: вкл выкл индикацию диодом на корпусе объемника, режим сильного\слабого мониторинга, и ченибудь еще, в данном случае режим памяти. Но я его не юзал и все перемычки выключил, оставил только на повышенную чувствительность.
После подачи напряжения объемник инициализируется (до 1 минуты) мигая диодом, замеряет так сказать пространство, определяет отправную точку. Потом начинает работать.
Распиновка LPT порта:
Схема подключения устройств к LPT порту
Пример работы:
Cтоит FreeBSD, на нем lptmon мониторит LPT Порт к которому напрямую подключен объемник
и датчик идущий на дверь (простая кнопка, замкнутая или разомкнутая при закрытой двери)
Открывается дверь, в базу mysql пишутся логи что во столькото открыласт дверь и во столькото закрылась. Некое вошедшее в дверь тело перемещается по кабинету, срабатывает объемник, пишет логи в базу, и пока он работает - каждую секунду выполняется скрипт который качает текущий кадр с камеры к себе на винт.
Еще можно отправить СМС если сегодня 1й раз открылась дверь или на любое другое событие.
Логика работы:
У LPT порта есть 5 ног чтения (они же пины) 10,11,12,13 и 15, заметьте 14й тут нет!.
Они являются входами и используются принтерами как тумблеры, при событиях например:
кончилась бумага,
принтер занят,
ошибка печати, итд итп.
Они то нам и нужны, к ним можно подключить 5 разных устройств.
Под FreeBSD работает программа lptmon которая мониторит эти пины.
Если взять кусок проволоки и замкнуть любой из вышеперечисленных пинов на землю (земля - любой с 18 по 25 пин этого же LPT порта) то программа будет считать что пин включился. Каждый пин может вызывать 3 события при которых можно выполнять комманды или запускать скрипты:
1. Пин включился
2. Пин работает (срабатывает каждую секунду пока пин замкнут)
3. Пин выключился
Собстно lptmon выполняя комманды при событиях от пинов запускает скрипты которые пишут в базу лог срабатывания, текущее состояние устройств подключенных к lpt порту, сохраняют скриншоты с камеры на винт, отправляют смс если нужно.
Приступаем к реализации.
Задача состоит в подключении к порту датчика двери и объемника а также реализации видеорегистрирования путем сохранения скришотов с ip камеры.
разделим ее на несколько этапов:
1. настройка софта и проверка lpt порта
2. подключение датчика открытости двери и объемника к lpt порту
3. настройка скриптов чтоб сохранялись кадры с камеры при наличии активности от объемника и велись логи в базу mysql
Настройка софта:
Создаем директорию /usr/local/etc/lptmon
качаем архив lptmon.tar.gz с программой lptmon с примерами скриптов и распаковываем:
#mkdir /usr/local/etc/lptmon
#cd /usr/local/etc/lptmon
#fetch http://zgbox.ru/files/notes/lptmon.tar.gz
#tar -xzvf lptmon.tar.gz
| Зеркало этого же файла:
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
683
|
25.7kb
|
2011-06-15
|
lptmon
|
|
В архиве лежит lptmon.c - это исходники программы, писал я ее сам, это моя первая программа на С++ под FreeBSD как и в прочем первая на C =) так что если есть примечения, дополнения - в студию.
Также там лежит сам уже откомпелированный файл lptmon, можно юзать его, установив chmod 777 lptmon если необходимо, а можно откомпелировать исходники коммандой
#CC lptmon.c -o lptmon_compiled
| Директория to_rc.d содержит скрипт lptmon который необходимо скопировать директорию в /usr/local/etc/rc.d/ он нужен для автоматического запуска программы lptmon при старте FreeBSD. Также необходимо в файл /etc/rc.conf прописать lptmon_enable="YES" иначе никакого (авто)запуска он выполнять небудет. Собсно делаем:
#cp to_rc.d/lptmon /usr/local/etc/rc.d/lptmon
#echo lptmon_enable="YES" >> /etc/rc.conf
| Теперь программа lptmon будет стартовать с системой, также ее можно стартовать вручную как просто запустив ./lptmon так и выполнив rc.d скрипт /usr/local/etc/rc.d/lptmon start или stop
В запуске нет ничего особенного, просто запускается /usr/local/etc/lptmoon/lptmon а при stop убивается коммандой killall lptmon
Но пока не нужно ничего запускать, сначала нужно настроить конфиг, об этом чуть пожже.
Директория testlpt, в ней лежит программа pr22 и ее исходник для тестирования lpt порта. Работает просто: запускается, получает состояния с 10 по 15 пинов и если какойто пин замкнут на землю то выдает pin10 on
у меня в данный момент 10й пин замкнут на что программа отвечает
Ее тоже можно смело использовать в своих скриптах.
Итак собсно пробуем замнкть один или несколько из 10,11,12,13,15 пинов на землю (на любой с 18 по 25 пин) и запустить ./pr22
Если программа показывает что замкнутые пин(ы) в состоянии on значит все ок, если нет - то я хз почему не видит ваш lpt порт, ковыряйте исходники %)
Переходим к настройке самого lptmon
Итак, исходя из того, что у нас будет подключен объемник ну допустим к 10 пину и датчик открытия двери на 11 пин то сконфигурим так, чтоб при событиях объемника при старте, работе, и запуске выполнялись скрипты 10_start, 10_cycle, 10_end.
Для датчика двери только два скрипта при открытии 11_door_open и закрытии 11_door_close
Кладем конфиг lptmon.config из распакованного архива в /usr/local/etc/lptmon.config и редактируем любимым редактором, у меня это mcedit
#cp lptmon.config /usr/local/etc/lptmon.config
#mcedit /usr/local/etc/lptmon.config
| файл lptmon.config
#конфиг файл lptmon.config программы lptmon
#должн лежать в /usr/local/etc/
#в параметрах допускаются табы и пробелы
#ковычки не допустимы!
#каждый пин может вызывать 3 события (выполнять комманды) при смене состояния:
#1. при переходе из пассивного состояния в активное
#2. при работе в цикле (срабатыват каждый раз при опросе если пин в
#активном состоянии)
#3. при переходе из активного состояния в пассивное
#пример настройки 10го пина
#опция pin10enable включает\выключает работу программы с пином
pin10enable = yes
#опция pin10revers определяет какое состояние для пина является
#пассивным, оно же ждущий режим. (нормально разомкнутое или нормально
#замкнутое)
#если по умолчанию пин не замкнут на землю и будет переводиться в рабочее
#состояние при замыкании его на землю, то эта опция устанавливается в "no"
#или не указывается
#Если пин по умолчанию замкнут на землю и переводится в рабочее состояние
#при размыкании его с землей (например для объемника, т.к он срабатывает
#разрывая цепь), то опция устанавливается в yes
pin10revers = yes
#комманда выполняемая при переходе пина из пассивного состояния в активное
pin10onstart = /usr/local/etc/lptmon/10_start
#комманда pin10oncycle выполняемая каждый раз при опросе пина
#если он уже находится активном состоянии
pin10oncycle = /usr/local/etc/lptmon/10_cycle
#комманда pin10onend выполняемая при переходе пина из активного
#состояния в пассивное
pin10onend = /usr/local/etc/lptmon/10_end
#Остальные пины 11,12,13,15 настраиваются по тому же принципу
pin11enable = yes
pin11revers = no
pin11onstart = /usr/local/etc/lptmon/11_door_open
pin11onend = /usr/local/etc/lptmon/11_door_close
| MySQL и таблицы:
Подразумевается чтоб мускул уже установлен и настроен. У меня на данный момент стояла версия 5.0. В проекте используется 2 таблицы:
objects - в которой хранится список подключенных устройств, их текущее состояние
objects_hist - это лог срабатываний устройств.
Имя базы: security.
Дамп всех таблиц также лежит в архиве и называется dump_security.sql
Естественно необходимо завести базу с именем security и экспортировать в нее таблицы из дампа.
Затем в таблицу objects добавить наши устройства указав их obname - имя объекта.
В нашем случае для объемника добавить запись с obname = scanner для датчика двери и obname = door.
Эти имена прописаны в скриптах.
Немного о скриптах:
Листинг скрипта (10_start) для события pin10onstart вызываемого при появлении активности от объемника, т.е. переход из спящего в рабочее состояние.
#!/bin/sh
db_host=localhost
db_pass=pass
db_user=root
db_name=security
obname=scanner
sql="use $db_name; insert into objects_hist (obname,status,dt)
values ('$obname','up',now());"
#echo $sql
/bin/echo $sql | /usr/local/bin/mysql -h$db_host -u$db_user -p$db_pass
sql="use $db_name; update objects set status='working', dtstart=now() where
obname='$obname';"
/bin/echo $sql | /usr/local/bin/mysql -h$db_host -u$db_user -p$db_pass
/usr/local/etc/lptmon/cam_screen
/usr/local/etc/lptmon/sms_start_activity
| Данный скрипт выполняет два sql запроса к mysql. В таблицу objects_hist пишет логи срабатываний (в данном случае включение устройства), обновляет в таблице objects текущее состояние устройства с именем scanner см строку "obname=scanner". т.е присваивает ячейке ststus состояние working для объекта scanner
Помимо запросов скрипт выполняет еще два скрипта cam_screen который сохраняет скриншот с камеры в нужное место и sms_start_activity который через почтовый шлюз, один раз в сутки отправляет мне смс на телефон о том что мол во столько то началась активность в кабинете. Например начальник внепланово зашел в кабинет в 8:29 и что-то взял, а прийдя на работу я могу посмотреть скришоты с камеры и выяснить что ему было нужно =) Эти два скрипта также выполняются всеми другими скриптами 10_end, 11_start, 11_end чтоб обеспечить наибольшую скриншотосохранность.
Скрипт sms_start_activity отправляет смс путем отправки обычных писем на почтовый шлюз оператора. Правдо использует для этой цели простую программу smtp-cli которую можно установить из портов.
Скрипт cam_screen просто скачивает скриншот с камеры fetch'ем в тихом режиме и ложит в папку.
Подключение датчика и объемника к LPT порту
Тут ничего сложного, руководствуясь этой схемой (она же в начале статьи после распиновки LPT) подключаем датчик двери и объемник к lpt разъему. Я разобрал старый шнур от принтера, отпаял все ненужное и припаял нужное. И втыкаем его в комп.
запускаем pr22 и смотрим что он показывает
#/usr/local/etc/lptmon/testlpt/pr22
pin10 on
| Видит что 10й пин замкнут объемником, закрываем дверь и пробуем снова:
#/usr/local/etc/lptmon/img/1/testlpt/pr22
pin10 on
pin11 on
| Теперь видно что 11 пин (который идет на дверь) замкнулся. Т.е все устройства работают нормально.
Проверяем пишут ли скрипты данные в базу путем их ручного запуска. Если да то можно запускать lptmon и наслаждаться процессом
#/usr/local/etc/rc.d/lptmon start
Server start ok ! ok. PID=60997
reading settings..
interval=1000
p10os=/usr/local/etc/lptmon/10_start
start working
| Звиняйте за кривоватый вывод программы, над ним еще не работал, самое важное тут это строка start working которая появляется когда конфиг успешно прочитан и началась работа. Если этой строки нет - скорее всего нет конфига в /usr/local/etc/lptmon.config или произошла какая-то ошибка, возможно с портом, но я у себя не разу такого не наблюдал.
Даже нарисовал веб морду для этого дела:
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
607
|
174.7kb
|
2011-06-15
|
Веб морда
|
|
см. также:
Мониторим 220 на FreeBSD через LPT
Программирование LPT под FreeBSD
Первоисточник
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=33137.
размещено: 2011-06-15,
последнее обновление: 2011-09-07,
автор: -ZG-
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1
Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat
Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat
Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills
Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS
Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs
Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD
Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC
Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat
Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot
Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless
Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
|
Комментарии пользователей [29 шт.]