Motion Aracı ile Harekete Duyarlı Güvenlik Sistemi Kurmak

Raspberry Pi’ın CSI arayüzünden bağladığınız kamerayı ve USB webcam’leri kullanarak harekete duyarlı bir alarm sistemi gerçekleştirebilirsiniz. Eğer kamera görüntülerinde ayarladığınız eşiği aşan miktarda bir hareketlenme olursa kayıt başlatabilir ya da bir programı çalıştırabilir, GPIO üzerinden alarmı tetikletebilir ya da sms/mail göndertebilirsiniz. Bu özellikle tatile gittiğinizde bahçenizde ya da evinizde neler olup bittiğinden anında haberdar olmak için çok kullanışlıdır. Benzer şekilde evcil hayvanlarınızı ya da vahşi doğadaki hayvanları takip etmek için de kullanılabilir.

motion daemon’ın çalışma şekli

Önceki başlıklarda kamera görüntülerinin ağ üzerinden MJPG biçiminde nasıl akıtılacağını anlatmıştım. Şimdi bu görüntü akışlarını motion adlı programa yönlendirerek, resim karesini oluşturan piksellerdeki değişim miktarına göre bir alarmın nasıl tetikleneceğine bakacağız. motion kamera görüntüsünü ağ akışı şeklinde alabileceği gibi yerelde bağlı bir kameradan da (webcam veya CSI kamera) alabilir. Ayrıca motion, mysql, postgresql ve sqlite3 gibi veri tabanları ile de entegre çalışabilir.

Öncelikle motion aracını aşağıdaki gibi yükleyelim:

motion ana yapılandırma dosyasını /etc/motion/motion.conf konumunda saklar. Bu dosyaya dokunmadan kendi yapılandırmamızı ~/.motion dizini altında tanımlayacağız. İlgili dizini ve dosyayı aşağıdaki gibi oluşturalım ve sahibini tanımlayalım:

motion.conf dosyasında düzenleyebileceğimiz bazı önemli ayarlar aşağıda yer almaktadır. Bu ayarları yeri geldiğinde farklı uygulamaları gerçekleştirmek için kullanacağız:

  • netcam_url: Video kaynağının URL adresini tanımlar. URL adresi http://, ftp://, mjpg://, rtsp://, mjpeg:// veya file:/// protokol belirteçlerinden herhangi birisi ile başlayabilir.
  • netcam_userpass: Bu seçenek, netcam_url ile URL adresi belirlenen video akış kaynağı kullanıcı adı ve parolası gerektiriyorsa kullanici_adi:parola biçiminde tanımlanmasını sağlar.
  • videodevice: netcam_url seçeneği ile uzak bir kameranın görüntüsünü işlemek yerine yerel video kaynaklarından birisi kullanılmak isteniyorsa ilgili video aygıtın yolu belirtilir. Örn; videodevice /dev/video0 ayarı ile Raspberry Pi’a bağlı ilk web kamerası görüntü kaynağı olarak kullanılır.
  • framerate: Video kaynağından yakalanacak kare sayısını tanımlar. Varsayılan değeri 1’dir.
  • daemon: motion aracının arka plan servisi olarak çalışmasını sağlar. Arka plan servisi için on olarak ayarlayın.
  • stream_port: netcam_url üzerinden aldığı görüntüyü işleyerek bu port üzerinden verir.
  • stream_localhost: motion çıktısının sadece localhost üzerinden izlenebilmesi için bir sınırlama getirir. motion görüntü akışının MJPG biçiminde ağ üzerinden izlenebilmesi için ön tanımlı on olan bu değeri off olarak ayarlamalısınız.
  • setup_mode: Motion’ın kalibrasyon ayarlarını yaparken kullanılır. Varsayılan değeri off’dur. Hareketin motion tarafından nasıl algılandığının veya hassasiyetinin ön izlemesini görüntülemek için kullanılır. On yapılarak etkinleştirildiğinde hareket algılanan bölgeler mavi renkte belirginleştirilerek gösterilir.
  • stream_motion: on değeri ile hareket algılanmadığı zamanlarda akıtılan görüntü karesi sayısını 1 ile sınırlar. Off yapıldığında ise hareket algılanıp algılanmadığına bakılmaksızın stream_maxrate ile belirtilen hızda akış gerçekleştirilir.
  • stream_maxrate: motion çıktı akışının saniyedeki çerçeve sayısını ayarlar. Hareket algılama yapılırken bir video ön izlemesi ile birlikte kullanılıyorsa video’nun akıcılığını artırmak için varsayılan değer olan 1’i yükseltebilirsiniz.
  • netcam_keepalive: Video kaynağı ile kurulan HTTP bağlantısının davranışını ayarlar.
    off: olarak ayarlanırsa, her bir http/1.0 isteğinin ardından bağlantı soketi kapatılır.
    force: http/1.0 protokolü ile önceki mevcut soketi kapatmadan kullanmaya çalışır.
    on: http/1.1 protokolü ile soket bağlantısını aktif tutar.
  • locate_motion_mode: Hareket algılanan bölgeyi işaretleyerek gösterir. Varsayılan değeri off’tur. Etkinleştirmek için on olarak ayarlayın.
  • locate_motion_style: Hareket algılanan bölgenin ne şekilde işaretlenerek gösterileceğini ayarlar.
    box: Hareket algılanan bölgeyi bir kutu içerisine alarak gösterir.
    redbox: Hareket algılanan bölgeyi kırmızı bir kutu içine alarak gösterir.
    cross: Hareket algılanan bölgenin merkezini işaretleyerek gösterir.
    redcross: Hareket algılanan bölgenin merkezini kırmızı ile işaretler.
  • target_dir: Hareket algılandığından kaydedilecek resim ya da videoların kaydedileceği dizini ayarlar. /home/pi/motion dizinini oluşturarak kullanabilirsiniz.
  • webcontrol_localhost: motion aracının web kontrol paneline sadece localhost üzerinden erişimi etkinleştirir. Ön tanımlı değeri on’dur. Ağ üzerinden erişmek için off yapın. Bu panel motion.conf üzerinden yapılabilecek ayarlamaları bir web tarayıcısı kullanarak değiştirmeyi ve görüntü ön izlemesini sağlar. Yalnız web arabiriminden gerçekleştirilen yapılandırma write bağlantısına tıklanmadığı sürece kalıcı olmaz ve motion programı yeniden başladığında motion.conf dosyasındaki yapılandırma yeninden yüklenir.
  • webcontrol_port: motion aracının ön tanımlı web kontrol port’unu ayarlar. Ön tanımlı değeri 8080’dir. Diğer servisler ile (örneğin mjpg_streamer) çakışmayan bir değere ayarlanır.
  • webcontrol_html_output: motion aracının web kontrol panelinin HTML biçiminde sunulmasını sağlar. Öntanımlı değeri on’dur. Off yapıldığında salt metin biçiminde bir web kontrol arabirimi hizmet verir. Web tarayıcı üzerinden kamera ön izlemesi devre dışı olur ve yapılandırma HTTP get yöntemi ile listelenebilir veya değiştirilebilir.
  • webcontrol_authentication: Web kontrol paneli için kullanıcı adı ve parola tanımlar. Tanımlanma biçimi kullanici_adi:parola şeklindedir. Örn; tankado:123456
  • threshold: Bir görüntü karesindeki kaç piksel değişimin hareketlenme (motion) olarak algılanacağını tanımlayan eşik değeridir. Bu değeri kameranızın çözünürlüğüne göre kalibrasyon ayarını yaparken uygun değere ayarlayabilirsiniz (setup_mode on).
  • minimum_motion_frames: hareket algılamasının değişim gösteren çerçeve sayısı üzerinden gerçekleştirilmesini sağlar. Varsayılan değeri 1’dir.
  • max_movie_time: Hareket algılandıktan sonra kaç saniyelik video kaydedileceğini tanımlar. Ön tanımlı değeri olan 0 ile kayıt dosyasının uzunluğuna bir sınırlama getirilmez.
  • on_motion_detected: Bir hareket algılandığında çalıştırılacak olan program ya da script’in yolunu tanımlar.
  • stream_auth_method: Kamera görüntü akışı için kimlik doğrulamasını etkinleştirir. Varsayılan değeri 0’dır ve akışı izlemek için kullanıcı adı parola girişi gerektirmez. 1 değeri verildiğinde HTTP basic authentication, 2 değeri için MD5 tabanlı kimlik doğrulaması etkinleşir. Kullanıcı adı ve parolası stream_authentication seçeneği ile tanımlanır.
  • stream_authentication: Varsayılan olarak pasif durumdadır. Stream_auth_method seçeneği ile birlikte kullanılır. stream_auth_method 1 olarak ayarlanmışsa değer olarak kullanici_adi:parola şeklinde tanımlama yapılır. Örneğin; tankado:123456 yapılırsa iSpy gibi görüntü akışı takip programlarının kullanıcı adı seçeneğine tankado, parolasına da 123456 girilir.
  • area_detect: Hareket algılamasının resim karesinin 9 parçaya bölümüş herhangi bir alanında gerçekleştirilmesini sağlar. Resim karesi sol üstten başlayarak 1’den 9’a kadar numaralandırılmıştır. Örneğin, resim karesinin sadece orta ve sağ alt kısmındaki değişimlerin algılanmasını istiyorsanız değer olarak 5 ve 9 verebilirsiniz. Örn: area_detect 59. Bu ayar tanımlanan bölgede hareket algılandığında on_area_detected seçeneği ile tanımlanan script’i çalıştırır. Dikkat, burada tanımlanan alanların dışında da hareket algılanmaya devam edilir. Yalnızca area_detect ile tanımlanan alandaki değişim on_area_detected ile tanımlanan script’in çalıştırılmasını sağlar.
  • event_gap: Bir defa hareket algılandığında motion olayı başlamış olur. Bu olayın kaç saniyelik hareketsizlik süresi sonunda tamamlanacağı bu değer ile ayarlanır. Örneğin event_gap değeri 10 olarak belirtilirse, hareketin algılandığı ilk andan itibaren 10 sn.’lik haretkesiz bir süreç beklenir ve bu sürenin sonunda motion olayını sonlandırılır. Olayın sonlanması ile on_event_end ile tanımlanan script’i ya da komutu çalıştırılabilir. Benzer şekilde; on_event_start ile ayarlanan script de hareketin başlangıcında çalıştırılır.

motion.conf dosyasının bir yedeği her zaman /etc/motion/motion.conf konumunda bulunur. Dilediğiniz zaman, yapılandırma dosyasını ön tanımlı ayarlarına döndürmek için yukarıdaki cp ve chown komutlarından yararlanabilirsiniz.

videodevice seçeneği ve CSI kamera

Bu kitabın yazıldığı sırada motion 4.0 sürümünde idi ve CSI kamera desteklenmiyordu. Yani, CSI kamerayı, motion ile doğrudan kullanmak mümkün değildi. Bu ihtiyacı dolaylı yoldan gidermek mümkün. CSI kamerayı mjpg_stream ile bir ağ akışına dönüştürerek netcam_url seçeneği ile motion’a verebilirsiniz.

motion aracının kalibre edilmesi

motion aracının ayarlarını yapmak için Raspberry Pi’a bir web kamerası bağlayın ve daha önce anlatıldığı gibi 8081. port’tan bir mjpeg akışı başlatın.

Kamera görüntüsünün hareket hassasiyetini ayarlamak üzere ~/.motion/motion.conf dosyasındaki seçenekleri aşağıdaki gibi ayarların, diğer seçenekler olduğu gibi durabilir. Bu uygulamada kameranın bağlı olduğu Raspberry Pi ile motion aracının çalıştığı Raspberry Pi aynı bilgisayardır ve IP adresi 192.168.2.198 olarak yapılandırılmıştır.

motion aracını yukarıdaki yapılandırma ile başlatıp sınamak için aşağıdaki komutu yazın. –c (configuration file) seçeneği belirtilmezse /etc/motion/motion.conf yapılandırma dosyası kullanılır.

İstediğiniz hassasiyeti yakalamak için, varsayılan 1500 piksel olan hassasiyet eşiğini, threshould değerini düzenleyerek değiştirebilirsiniz. Karışık bir görüntüye sahipseniz veya area_detect özelliğini kalibre ediyorsanız, setup_mode seçeneğini etkinleştirerek incelemeniz daha faydalıdır. setup_mode seçeneği on yapıldığında görüntüdeki hareketsiz pikseller siyah renkte, hareketli pikseller mavi renkte görüntülenecektir. Ayrıca area_detect seçeneğini kalibre ederken, genel seçenek olan gap_event değerini küçük tutmak gerekir. Aksi takdirde resim karesinin diğer alanlarındaki olası değişimler resim karesinin belirlenen alanındaki değişimin on_area_detected ile tanımlanan script’i tetiklenmesini geciktirir. Aşağıdaki resimde, setup_mode etkinleştirildiğinde elde edilen ön izlemenin fotoğrafı gözükmektedir.


setup_mode etkin iken elde edilen ön izleme

motion aracının desteklediği olaylar

motion.conf çeşitli olaylara bağlı olarak harici komut çalıştırmak için seçenekler sunar. Örneğin bir hareket algılandığında, bir video kaydı başladığında/tamamlandığında veya görüntü kaynağı kesildiğinde bir komutun çalıştırılmasını sağlayabilirsiniz. Açıklamaları aşağıda yer alan seçeneklere değer olarak bir komut veya komutların yer aldığı betik dosyasının tam yolunu verebilirsiniz.

  • on_event_start: Yeni bir hareket algılandığında bu olay gerçekleşir. Bu olay event_gap süresi kadar hareketsiz geçen ilk akışın ardından gelen ilk hareket tespit edildiğinde başlar.
  • on_event_end: event_gap ile tanımlanan süre kadar geçen hareketsiz akışın sonunda bu olay tetiklenir.
  • on_picture_save: motion bir resim karesi kaydettiğinde bu olay tetiklenir.
  • on_motion_detected: motion bir hareket algıladığında bu olay tetiklenir.
  • on_area_detected: Görüntü karesinin area_detect seçeneği ile belirlenen konumunda veya konumlarında bir hareket algılandığında bu olay tetiklenir.
  • on_movie_start: motion bir video dosyası yarattığında bu olay tetiklenir.
  • on_movi_end: motion bir video dosyasını kaydetmeyi bitirdiğinde bu olay tetiklenir.
  • on_camera_lost: motion görüntü kaynağı ile olan iletişimini kaybettiğinde bu olay tetiklenir.

Aşağıdaki örnek yapılandırma, kamera görüntüsünde bir hareket algılandığında /home/pi/hareket_algilandi.sh dosyasını çalıştırmaktadır.

hareket_algilandi.sh dosyası ise hareketin algılandığı tarihi hareketler.txt dosyasına kaydetmektedir.

Tespit edilen hareketlerin tarihlerini motion’ı başlattıktan sonra tail aracı ile izleyebilirsiniz.

Motion’ı kalibre ederken ya da yapılandırırken tüm olayların nasıl ve ne zaman tetiklendiğini görmek isteyebilirsiniz. Tüm olaylara aşağıdaki echo komutunu yerleştirerek olayları kayıt altına alabilirsiniz. Bu echo komutu olaylar.txt ’nin içine olayın gerçekleşme zamanını ve olayın adını yazarak biriktirir. Olayları canlı izlemek için ise yine tail aracından faydalanabilirsiniz.

motion aracı ile resim kaydı

motion aracını kalibre ettikten sonra algılanan harekete ait resim karelerinin jpeg veya ppm biçiminde diske kaydedilmesini sağlayabilirsiniz. Kayıt dizinini oluşturduktan sonra, motion.conf dosyasında yer alan “Image File Output” bölümündeki seçenekleri aşağıdaki gibi ayarlayabilirsiniz.

motion’ı başlatmadan önce, kalibrasyon başlığında anlatıldığı gibi bir 8081. Port’tan akış yapacak şekilde bir mjpeg akışı başlatmayı unutmayın.

Yukarıdaki yapılandırma hareketin algılandığı ilk ana ait resim karesini %75 kalitede jpeg olarak /home/pi/motion dizinine, tarih bilgisi ile kaydeder.

Ayarlanan seçeneklerin görevleri aşağıdaki gibidir:

  • target_dir: video ve resimlerin kaydedileceği dizini tanımlar.
  • output_pictures: Bu ayar bir hareket algılandığında resim karesinin kaydedilme seçeneklerini ayarlar. Seçenek on,off, first, best ve center’dan birisi olabilir. On yapıldığında gap_event süresi içerisinde sürekli kayıt yapılır. Off yapıldığında, resim kayıt işlevi kapatılmış olur. First değeri sadece hareketin algılandığı ilk ana ait karenin kaydedilmesini sağlar. Best ile hareketin en iyi algılandığı (piksel değişiminin en yüksek olduğu) ana ait kare kaydedilir, center değeri ile resmin merkezindeki hareketin en yoğun oldu an referans alınır.
  • quality: 0 ile 100 arasında resim kayıt kalitesini ayarlar. Varsayılan değeri 75’dir.
  • picture_type: Kaydedilecek resmin biçimini jpeg ve ppm’den biri olarak ayarlar.
  • text_left: motion’ın kaydettiği ve ağa akıttığı görüntü karelerinin sol alt tarafına sabit bir metin yazar. Bu metin görüntünün kaydedildiği kameranın konumu açıklayabilir. Örn: tankado_kamera1
  • text_right: Görüntü karesinin sağ alt tarafına varsayılan olarak %Y-%m-%d\n%T-%q formatında zaman bilgisini yazar.
  • text_double on: Görüntü karesinin üzerine text_left ve text_right ile yazılan yazının puntosunu büyültür.
  • exif_text: Kaydedilen jpeg resimlerin meta bilgisine açıklayıcı bir metin kaydeder. Bu meta bilgisi resmin EXIF veri alanına kaydedilir ve çeşitli programlar ve arama motorları tarafından okunabilir.

motion aracı ile video kaydı

motion ile video kaydı için öncelikle pi kullanıcısının ev dizininde motion adlı bir dizin oluşturun ardından .motion/motion.conf dosyasının “FFMPEG related options” başlıklı bölümünde yer alan seçenekleri aşağıdaki ayarlayabilirsiniz:

Yukarıdaki örnek yapılandırma dosyasında kullanılan seçeneklerin görevleri şöyledir:

  • setup_mode: Daha önce açıklandığı üzere kalibrasyon amaçlı kullanılan setup kipi etkisizleştirilmiştir.
  • event_gap: 60 saniyelik hareketsizlikten sonra motion olayı sonlandırılır ve video diske kaydedilir.
  • threshold: Resim karesindeki 1000 pixel’lik değişim motion olayının başlaması için yeterlidir.
  • netcam_url: http://192.168.2.198:8081/?action=stream adresindeki mjpeg akışı görüntü kaynağı olarak ayarlanmıştır.
  • target_dir: video dosyaları /home/pi/motion dizinine kaydedilecektir.
  • locate_motion_mode: Resim karesindeki hareketli alanların vurgulanması etkinleştirildi.
  • locate_motion_style: Resim karesindeki hareketli alanların vurgulanma biçimi olarak kırmızı çerçeve kullanılacağı belirtildi.
  • stream_port: motion’ın ürettiği görüntü akışı 8080. TCP port’undan verilecek.
  • stream_quality: motion’ı ürettiği görüntü akışının resim kalitesi %50 olarak ayarlandı.
  • stream_maxrate: motion’ın ürettiği görüntü akışının saniyedeki kare sayısı 15 ile sınırlandırıldı.
  • stream_localhost: motion’ın ürettiği görüntü akışının sadece localhost üzerinden izlenebilmesini sınırlandıran seçenek etkisizleştirildi. Böylece ağ üzerindeki diğer bilgisayarlardan da görüntü akışı izlenebilir oldu.
  • stream_authentication: motion’ın ürettiği görüntü akışını izlemek için kullanıcı adı ve parola tanımlandı. Kullanıcı adı tankado, parolası da 123456’dır.
  • ffmpeg_output_movies: Gerçek zamanlı görüntü akışı kodlanırken ffmpeg kodlayıcısının kullanılması etkinleştirildi.
  • ffmpeg_video_codec: ffmpeg video sıkıştırması için mpeg4 kullanılması söylendi. Kullanılabilecek diğer seçenekler swf, flv, mov, ogg, mkv ve mp4’tür.
  • max_movie_time: motion’ın kaydedeceği bir video dosyasının en fazla 600 sn. olması ayarlandı.

motion’ı başlatmadan önce, kalibrasyon başlığında anlatıldığı gibi bir 8081. port’tan akış yapacak şekilde bir mjpeg akışı başlatmayı unutmayın. Daha sonra motion’ı aşağıdaki gibi çalıştırarak iSpy gibi bir araçla veya tarayıcınızın adres çubuğuna http://192.168.2.198:8080/ URL adresini yazarak izleyebilirsiniz.

mjpeg_streamer ve motion’ı açılışta başlatmak

Raspberry Pi’ın açılışında mjpegstreamer’ın ürettiği görüntü akışını motion’a aktarmak için crontab kullanılabilir. Öncelikle mjpeg_streamer ve motion’ı başlatacak olan aşağıdaki kabuk betiğini autostart.sh ismiyle kaydedelim ve çalıştırma izni verelim.

Ardından root kullanıcısının cron tablosuna autostart.sh dosyasını aşağıdaki gibi ekleyelim. Daha önce değinildiği gibi @reboot etiketini, Raspbery Pi bilgisayarının açılışında çalıştırılmasını istediğimiz komut ve betikler için kullanabiliriz.

Yaptığımız bu ayarlara göre; Raspberry Pi’ın açılışında önce mjpg_streamer /dev/video0 aygıtını 8081. Port’tan ağa akıtacak daha sonra motion aracı çalışarak bu port’u okuyacaktır. İkinci satırda kullandığımız sleep komutu, arka plana itilen (& ile) mjpeg_streamer’ın hazır olması için zaman tanımak amaçlıdır.

Eğer motion aracı ile web kamerası aynı bilgisayarda bulunuyorsa, mjpeg_streamer’ı kullanmaya gerek olmayabilir. Bunun için motion.conf dosyasındaki netcam_url seçeneği yerine videodevice seçeneği, /dev/video0 aygıt dosyasını video kaynağı olarak kullanmak üzere ayarlanabilir. Bu durumda ham video görüntüsü (port 8081)  yerine motion.conf dosyasındaki stream_port seçeneği ile ayarlandığı üzere 8080. port’tan yapılan akış ağ üzerinden izlenebilir olur.

Motion’ın başlangıcındaki hatalı algılamaları bertaraf etmek

motion programı çalışmaya başladığı ilk anda on_event_start olayı tetiklenebilir. Aslında bu motion tarafından tetiklenmez. motion çalışmaya başladıktan itibaren yakaladığı ilk kareyi hareket olarak algılamaz. Ancak motion’ı bir web kamera ile kullanıyorsanız bazı kameralar çalışmaya başladıkları ilk anda ışık ve kontrast kalibrasyonu yapabilirler. Bu da motion’a hareket olarak yansır.

Motion’ın hareket algılama özelliğini başlangıçta birkaç saniye geciktirmenin bir yolu yoktur. Ancak bu dolaylı yollardan gerçekleştirilebilir. Bunun için motion’ı açılışta pasif olarak başlatarak web kontrol arayüzü üzerinden hareket algılama elle başlatılabilir.

motion –m seçeneği ile başlatıldığında hareket algılama pasif olarak başlar. motion.conf dosyasındaki webcontrol seçenekleri aşağıdaki gibi ayarlanırsa istenildiği zaman HTTP üzerinden algılama başlatılabilir.

Yukarıdaki seçenekler ile 8090. TCP port’u üzerinden web kontrol paneli etkinleştirilerek kullanıcı adı ve parolası ile erişimi kısıtlanmıştır. Kullanıcı adı tankado, parolası da 123456 olarak ayarlanmıştır.

motion başlatıldıktan sonra curl aracı ile aşağıdaki gibi bir GET isteği gönderilerek algılama etkinleştirilebilir. Tabii ki algılamayı etkinleştirmeden önce birkaç saniye bekleyerek kameraya hazır olmaları için vakit tanımak yerinde bir davranış olacaktır.

Curl ile motion’ın http://localhost:8090 adresindeki kontrol paneline /0/detection/start gönderilirse algılama başlatılır. Algılamanın başladığını servisin html yanıtında yer alan “Detection resumed” satırından anlayabilirsiniz. –u seçeneği ile kontrol panel üzerinde kimlik doğrulaması gerçekleştirilmiştir (http basic auth). Benzer şekilde /0/detection/pause ile de algılama duraklatılabilir.

Toparlamak gerekirse; etkinleşirken otomatik görüntü kalibrasyonu yapan bir kameranız varsa, daha önce oluşturduğumuz autostart.sh betiğini aşağıdaki gibi düzenleyerek bu sorundan kurtulabilirsiniz

UYGULAMA: motion aracı ile sesli alarm sireninin tetiklenmesi

Bu başlıkta motion’ın desteklediği olaylardan birisi olan on_event_start kullanılarak bir merkezi alarm sisteminin Raspberry Pi ile nasıl tetiklenebileceği anlatılacaktır. Ev ve işyerlerinin güvenliğini sağlamak için kullanılan alarm sistemlerinin hepsi PIR sensörlerini destekler. Bu sensörler ortamda bir hareket algıladığında merkezi alarm sistemini uyarırlar ve alarmı tetiklerler. PIR sensörleri ortama kızılötesi bir ışık yayarak ışığın geri yansımasını algılarlar. Eğer bu yansımada bir değişim olmuşsa bir röle aracılığı merkezi alarm sisteminin PIR kontaklarından birisini anahtarlarlar. Alarm sistemlerinin üzerinde birden fazla PIR sensörün bağlanabilmesi için giriş noktaları vardır. Alarm sisteminizin kurulum kitapçığını inceleyerek bu giriş noktalarının klemenslerini tespit edebilirsiniz.

Aşağıdaki örnek devrede Raspberry Pi’ın GPIO.7 port’u IRFZ24 adlı MOSFET’in Gate bacağına bağlıdır. MOSFET’in drain bacağında ise 5v’luk bir röle çalışmaktadır. Rölenin normalde açık (NO/Normally Open) kontakları ise merkezi alarm sisteminin PIR girişlerinden birisine bağlanmıştır.


Raspberry Pi ile merkezi alarm sisteminin bağlanması

motion.conf dosyasına ekleyeceğimiz bir Python script’i ile kamerada bir hareket algılandığında GPIO.7 çıkışını lojik olarak 1 konumuna getirerek röle üzerinden alarmın tetiklenmesini sağlayacağız. Bundan sonra eğer alarm kurulu ise çalmaya başlayacak ve kontrol Raspberry Pi’dan çıkacaktır. Bunun için GPIO.7’yi kısa bir süreliğine tetiklememiz yeterlidir, ardından tekrar lojik 0 konumuna alacağız ki alarm iptal edildiğinde rölemiz alarm sistemini tekrar tetiklemesin. Bunun için öncelikle aşağıdaki Python kodunu nano editörü ile yazalım ve alarmi_tetikle.py ismiyle ev dizinimize (~) kaydedelim.

Ardından motion.conf dosyamızı açarak on_event_start olayına gerekli komutu yazalım ve motion programını başlatalım.

motion programı çalışmaya başladıktan sonra bir hareket algılandığında on_event_start olayı ile tanımlanan komut yani alarmi_tetikle.py programımız çalışacaktır. Bu programda GPIO.7’ye bağlı röleyi 1 saniyeliğine çalıştıracak ve alarmı tetikleyecektir.

UYGULAMA: Birden fazla kamerayı motion ile kullanmak

Birden fazla kamerayı motion ile kullanmak için motion.conf dosyasında camera seçeneği kullanılır. camera seçeneği ile her bir kamera için ayrı bir yapılandırma tanımlanır. Örneğin Raspberry Pi’a bağlı iki adet web kameramız olsun ve bunlar /dev/video0 ve /dev/video1 aygıt isimleri ile bağlı olsunlar. Bu durumda .motion/motion.conf dosyasına her bir kamera için aşağıdaki yapılandırmayı eklememiz gerekir. Dikkat edilmesi gereken en önemli nokta, kamera yapılandırması ayrı dosyalarda (kamera0.conf ve kamera1.conf) tanımlanacağından motion.conf dosyasında herhangi bir akış kaynağı belirtmemek gerekir. Yani, netcam_url ve videodevice seçeneklerinin başına ; veya # koyarak bu seçenekleri etkisizleştirmelisiniz.

nano editörünü kullanarak kamera0 ve kamera1 dosyalarının içeriğini aşağıdaki gibi oluşturabilirsiniz:

Yukarıdaki yapılandırmaya göre video0 kamerası 8001, video1 kamerası da 8002. Port’tan yayın yapacak ve kayıtlarını sırasıyla /home/pi/motion/kamera0 ve /home/pi/motion/kamera1 dizinlerine kaydedecektir. Diğer global yapılandırma seçenekleri ise motion.conf dosyasından okunacaktır. motion.conf dosyasında stream_auth_method seçeneğini ayarlamışsanız kamera0.conf ve  kamera1.conf yapılandırmaları da bu ayardan etkilenir. Yani, kamera0 ve kamera1’in ağ akışlarına erişmek için de kullanıcı adı ve parola doğrulaması yapmak gerekir.

Kamera akışlarını aşağıdaki gibi başlatarak iSpy gibi bir program aracılığı ile sınayabilirsiniz:

Motion.conf dosyasında webcontrol_port ile tanımlanan port numarası, motion’ın kontrol panelinin port numarasıdır. Bu port numarasını kullanarak kameraları toplu olarak izleyebilirsiniz. Bunun için web tarayıcınızın adres çubuğuna  http://192.168.2.198:8090 URL adresini yazın.

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.