ZoneMinder program do monitoringu

System monitoringu. Kiedyś o zainstalowaniu go we własnym domu mogli byśmy tylko pomarzyć. Chyba, że zamiast marzyć dorobiliśmy się grubego portfela :-). Ale dziś w dobie ciągle spadających cen kamer przy jednoczesnym wzroście ich możliwości taki kilko kamerowy systemik jest już w finansowym zasięgu praktycznie każdego. Najprościej jest zakupić kamery IP, gdyż są to w zasadzie już gotowe jedno kamerowe systemy. Mają wbudowane praktycznie wszystko co potrzebujemy. Taką kamerę wystarczy podłączyć do sieci zasilającej oraz komputerowej i skonfigurować pod własne potrzeby. Jednak jeśli chcieli byśmy mieć kilka kamer w systemie, do tego automatyczną rejestrację wykrytych zdarzeń to i tu producenci wychodzą nam na przeciw dodając do swoich produktów bardziej lub mniej zaawansowane programy pozwalające na połączenie wielu kamer w jeden spójny system monitoringu. I mogło by się wydawać czego można chcieć więcej? Po co ten poradnik skoro to wszystko takie proste? Rzeczywiście taki system buduje się bardzo prosto ale… Czasem bywa tak, że kamery których chcemy użyć do budowy naszego systemu pochodzą od różnych producentów. I tu spotyka nas duża przykrość. Niestety darmowe oprogramowanie dołączane do kamer chce współpracować tylko ze sprzętem od jednego producenta i nie chce współpracować z kamerami konkurencji.I teraz albo będziemy jednocześnie korzystali dwóch niezależnych programów, co osobiście uważam za najmniej sensowne rozwiązanie, albo zakupimy licencję rozszerzającą możliwości naszego systemu umożliwiając podłączanie do niego obcych kamer. Nierzadko zakup taki przewyższa koszt zakupu samych kamer. Ja postanowiłem rozejrzeć się za trzecim rozwiązaniem tego problemu i jest nim darmowy program ZoneMinder rozpowszechniany na licencji GNU.Program ma w zasadzie tylko jedną wadę i to nie dla wszystkich. A mianowicie zainstalować go można jednanie na komputerach mających za system operacyjny którąś z dystrybucji Linuxa.

Tyle tytułem wstępu a teraz konkrety:

Mój system (w zasadzie to mikro system) wykorzystuje dwie kamery IP:

  1. Megapikselową VIVOTEK FD8133
  2. Obrotową z interfejsem WiFi FOSCAM FI8918W

Całość obsługuje serwer oparty na dystrybucji Linux Debian “squeeze”. Odpowiada on za centralne zarządzanie kamerami oraz nagrywanie, odtwarzanie i podgląd poprzez interfejs www. A wszystko to dzięki aplikacji ZoneMinder.

Kamera Vivotek jest wpięta bezpośrednio do sieci po kabelku kat5. Foscam`a podłączyłem z siecią wykorzystując jego interfejs WiFi.Odpowiednia konfiguracja routera internetowego pozwala mi na dostęp do systemu monitoringu z każdego miejsca gdzie mam Internet. Wszystko klasycznie jak w każdym innym systemie tego rodzaju czyli łatwo szybko i przyjemnie. Trochę problemów stworzył sam ZoneMinder oczym pisze niżej.

W pierwszym kroku zainstalowałem ZoneMindera z repozytorium Debiana

apt-get install zoneminder

Niejako przy okazji dla uzupełnienia pakietów potrzebnych do działania ZoneMindera zostały doinstalowane m.inn. Apache, php, Mysql itp. Niestety okazało się, że w 64bitowej wersji dystrybucji linuxa, którą miałem na serwerze system monitoringu nie pokazywał obrazu z kamery Vivoteka. Poza brakiem obrazu w logach ZoneMinder`a pojawiły się wpisy:

zmc_m2[24715]: WAR [Discarding packet for unrecognised ssrc 9ec8bd11]
zmc_m2[24715]: WAR [Discarding packet for unrecognised ssrc 85b909c9]

zmc_m2[24715]: WAR [Discarding packet for unrecognised ssrc c35d1619]
zmc_m2[24715]: WAR [Discarding packet for unrecognised ssrc 3cecfb85]

ZoneMinder z kamerą VIVOTEKa aby w miarę w pełni wykorzystywać jej możliwości powinien komunikować się z nią z użyciem protokołu RTSP i to z nim był problem w 64bitowej wersji ZoneMinder`a dla Debian squeeze. Dla wszystkich pragnących głębiej wejść w ten temat polecam zapoznanie się z tym postem z forum Debiana

Tu napiszę tylko jak poradzić sobie z tym problemem:

  1. Odinstalowujemy szwankującego ZoneMinder`a
    apt-get remove zoneminder
  2. Pobieramy źródła pakietu Zoneminder
    apt-get source zoneminder
  3. Tworzymy plik z łatką którą trzeba zaaplikować pobranym źródłom, nazwijmy go np. ssrc.patch. Jego zawartość pobrałem ww. postu z forum Debiana ale musiałem go trochę zmodyfikować. Autor widać miał trochę inaczej sformatowane pliki źródłowe i program “patch” nie potrafił zidentyfikować właściwych linii. Mój plik z łatką wyglądał tak:
    ZoneMinder-1.24.2.old/src/zm.h 2009-03-20 05:07:00.000000000 -0700+++ ZoneMinder-1.24.2/src/zm.h 2010-06-29 10:45:24.000000000 -0700
    @@ -17,6 +17,8 @@
    // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    //
    +#include "stdint.h"
    +
    #ifndef ZM_H
    #define ZM_H
    @@ -34,14 +36,14 @@
    #endif
    }
    -typedef unsigned charU8;
    -typedef unsigned shortU16;
    -typedef unsigned longU32;
    -typedef unsigned long long U64;
    -
    -typedef signed charS8;
    -typedef signed shortS16;
    -typedef signed longS32;
    -typedef signed long longS64;
    +typedef uint8_t U8;
    +typedef uint16_t U16;
    +typedef uint32_t U32;
    +typedef uint64_t U64;
    +
    +typedef int8_t S8;
    +typedef int16_t S16;
    +typedef int32_t S32;
    +typedef int64_t S64;
    #endif // ZM_H
  4. Integrujemy łatkę z pobranymi plikami źródłowymi ZoneMindera, np tak:
    patch ./zoneminder-1.24.2/src/zm.h ssrc.patch
  5. Kompilujemy źródła.W moim przypadku okazało się, że brakowało jeszcze trochę plików nagłówkowych potrzebnych do poprawnej kompilacji ZoneMindera i to jest chyba najlepszy moment żeby je doinstalować:
    apt-get install libpcre++-dev libavutil-dev libavcodec-dev \
    libavformat-dev libbz2-dev libgnutls-dev libswscale-dev \
    libjpeg-dev libmysqlclient-dev gnutls-openssl-dev libpcre-dev \
    libavutil-dev libavcodec-dev libavformat-dev libbz2-dev

i możemy przystąpić do kompilacji źródeł ZoneMindera

 ./zoneminder-2.24.2/debian/rules build

Jeśli spodka na tu przykra niespodzianka w postaci komunikatu:
autoreconf:

Polecenie nie znalezione

musimy doinstalować autoconf`iga

 apt-get install autoconf

Inna niespodzianka to koniec kompilacji z błędem:

 zm_mpeg.cpp:325: error: ‘img_convert’ was not declared in this scope

Związany jest z tym, że kompilator spodziewa się pliku nagłówkowego do ffmpeg`a w innym miejscu niż jest w rzeczywistości

wystarczy plik avcodec.h z katalogu: /usr/include/libavcodec skopiować do katalogu:/usr/include/ffmpeg i po ponownym

 ./zoneminder-2.24.2/debian/rules build

źródła powinny się wreszcie skompilować

  • Instalujemy ponownie ZoneMinderByć może dlatego że to moja pierwsza taka kompilacja źródeł w Debianie i brakuje mi trochę wiedzy w tym zakresie to miałem z tym mały problem. Po komendzie:
     ./zoneminder-2.24.2/debian/rules install

    ZoneMinder „zainstalował” się w katalogu … ./zoneminder-2.24.2/debian/zoneminder. To mnie trochę zdziwiło, nie dywagując za bardzo nad tą sytuacją całą zawartość tego folderu przeniosłem do katalogu głównego serwera. Struktura katalogów jest odpowiednia więc operacja prosta.

     mv ./zoneminder-2.24.2/debian/zoneminder/* /
  • Dodajemy konfigurację strony ZoneMinder`a do serwera www Apache.
     ln -s /etc/zm/apache.conf /etc/apache2/sites-enabled/zm.conf
     /etc/init.d/apache2 reload

 

Teraz możemy wreszcie przejść do konfiguracji systemu monitoringu i dodać nasze kamery do niego.

Bardzo możliwe, że po dodaniu kamer pojawi się kolejny problem (u mnie występował nie tylko w dystrybucji Linux Debian ale i Fedorze na której testuje róże rzeczy). Mianowicie nie uzyskujemy obrazu na podglądzie kamer lub tylko jednej kamery a w logach pojawiają się wpisy następującej treści:

 zmwatch[26154]: ERR [Can't get shared memory id '7a6d0001', 1: Nie ma takiego pliku ani katalogu]
 zmwatch[26154]: ERR [Can't get shared memory id '7a6d0001', 1: Nie ma takiego pliku ani katalogu]
 zmwatch[26154]: ERR [Can't get shared memory id '7a6d0001', 1: Nie ma takiego pliku ani katalogu]

Oznaczają one tylko tyle, że wielkość deklarowanej w kernelu shared memory jest zbyt mała. ZoneMinder potrzebuje jej tym więcej im większa jest rozdzielczość przechwytywanego z kamer obrazu. Można Oczywiście zmniejszyć rozdzielczość kamer ale to chyba nie jest właściwa droga.

Aby szybko sprawdzić czy wybrana przez nas wielkość pamięci jest odpowiednia wydajemy polecenie:

 echo 167772160 >/proc/sys/kernel/shmall
 echo 167772160 >/proc/sys/kernel/shmmax

Jeśli obraz ze wszystkich kamer się pojawił to możemy zmienić plik konfiguracyjny kernela tak aby pamięć została trwale zwiększona

Modyfikujemy plik “/etc/sysctl.conf”

 # Increase the maximum shared memory
 kernel.shmall = 167772160
 kernel.shmmax = 167772160

W moim wypadku ze względu na megapikselową kamerę pamięć została zwiększona do 1567772160 bajtów.

No i to by było na tyle, wprawdzie pozostaje jeszcze sprawa sterowania obrotową FOSCAM FI8918W, która miała brzydki zwyczaj patrzenia w sufit po chwilowej utracie zasilania. Ale to już historia na inną okazję.

12 komentarzy do “ZoneMinder program do monitoringu”

  1. Zainstalowałem zoneminder. Nie ma go w rozwijanej liście itp. Przez przeglądarkę wpisałem: [adres urządzenia na którym jest zainstalowany zm]/zm/zoneminder i… nic. Więc jak go włączyć? 🙂

    1. Trochę za lakoniczne pytanie. Zoneminder dostępny jest w zasadzie tylko z poziomu przeglądarki internetowej i nie znajdziesz go w żadnym menu. Rozmiń proszę co znaczy “nic” po wpisaniu adresu “[adres urządzenia na którym jest zainstalowany zm]/zm/zoneminder” Dostajesz informację o nie znalezieniu strony czy serwera a może strona się otwiera tylko z błędami? Swoją drogą to coś nie z tym adresem bo albo /zm po [adres urządzenia na którym jest zainstalowany zm] albo /zoneminder. W zależności co jest wpisane jako alias w konfiguracji ZM dla serwera www. U mnie pierwsza linia w pliku /etc/zm/apache.conf.

      1. Dostaję informację “błąd 404, zoneminder was not found on this server. Apache 2.2.22 (Debian) Server at (adres ip urządzenia) port 80”. Próbowałem odinstalować i zainstalować, ale nie było tych informacji co wcześniej (takie szare okienko-wiem mój błąd, że nie spojrzałem co to-przyzwyczajenie z windy :p).

  2. Bardzo pożyteczny opis. Właśnie zbieram się do ustawienia kamerki w domku na działce (420 km od domu). Przeczytanie (ze zrozumieniem !! -:) oszczędzi mi samodzielnego rozpoznawania źródeł ewentualnych kłopotów. System Debian u mnie jest w wersji 32-bitowej, więc będę mógł się posłużyć gotowym programem i nie kompilować go ze źródeł. Dziękuje i pozdrawiam.

Dodaj komentarz