In de jaren ’50 en ’60 was er bijna nog geen diefstal en kon je gewoon de deur nog open laten staan. Tegenwoordig moeten we alles goed beveiligen tegen inbraak. Hiervoor kun je complete camerabeveiligingssystemen kopen, maar het kan natuurlijk ook anders! Knutsel zelf je eigen beveiliging en ga aan de slag met Linux, wat webcams, mobiele telefoons en (WiFi) IP-camera’s. Een avondje knutselen en je huis is beveiligd!

Auteur: Arjan ten Hoopen

Tijd om aan de slag te gaan. We gaan in dit artikel uit van een schone OpenSUSE Leap 15 in een Desktop plus Plasma installatie. Wat we verder nodig hebben, is ZoneMinder. ZoneMinder is een softwarevideo bewakingssysteem. Het heeft weliswaar een .com website, maar laat dit je niet afschrikken, want het is toch echt open source! ZoneMinder heeft een web interface, dus je kunt vanaf elke plek ZoneMinder aanspreken. Dit houdt natuurlijk wel in dat ZoneMinder afhankelijk is van een webserver.

Download

Het downloaden van de software kan voor vele distributies vanaf de website van ZoneMinder en ook de source is daar te vinden. Voor OpenSUSE staan er echter geen kant-en-klare pakketten klaar, maar Liguid-Co in Duitsland heeft ze wel beschikbaar (zie kader met links). Voeg de repo en de Packman repository toe. Installeer vervolgens ZoneMinderMP en python3-zm_database_init. Mogelijk komt er een resolutieconflict met python-zm_database_init, maar die kun je naast je neer leggen. Met ZoneMinderMP zullen alle afhankelijke pakketten geïnstalleerd worden. Dubbel check of die nieuwste versie van ffmpeg (ffmpeg-3) uit de Packman repository geïnstalleerd is. Dit is namelijk erg belangrijk.

Je zult ook zien dat er een ZoneMinder is naast ZoneMinderMP. Beide pakketten zijn hetzelfde, maar de mp-versie biedt ook ondersteuning voor ffmpeg en mjpeg. Heb je ZoneMinder al geïnstalleerd, dan kun je deze eenvoudig vervangen door ZoneMinderMP. Zorg wel dat je van tevoren het config bestand (/etc/zm.conf) veiligstelt en deze terug zet, nadat ZoneMinderMP is geïnstalleerd.

SQL

Mocht je net als ik uitgaan van een schoon OS, dan zal tijdens de installatie ook Apache2 en ook MySQL (of MariaDB) geïnstalleerd worden. Deze moeten echter nog wel opgestart worden:

systemctl enable apache2 mysql

systemctl start apache2 mysql

Heb je het root wachtwoord voor MySQL nog niet ingevuld, doe dit dan nu. Start in een terminal de MySQL shell op door middel van:

/usr/bin/mysql -u root -p

Vervolgens wordt er om een root password gevraagd. Druk op Enter, want initieel is het wachtwoord nog “leeg”. Je krijgt nu de MySQL prompt te zien. Type het volgende MySQL commando:

UPDATE mysql.user SET Password = PASSWORD('wachtwoord') WHERE User = 'root';

Hierbij verander natuurlijk wachtwoord in het door jouw gekozen wachtwoord. Vervolgens toets je het commando:

FLUSH PRIVILEGES;

Hierna verlaat je de MySQL shell via het commando quit. Het root wachtwoord voor MySQL is nu ingesteld. De volgende stap is dat we in MySQL een database met tabellen maken. Dit hoef je niet helemaal zelf te doen, want daar is uiteraard al een script voor. Om dit script uit te voeren, moet je echter wel root privileges (op Linux) hebben, want dit SQL script is alleen leesbaar voor Linux-gebruiker root. Als Linux root gebruiker voer je het volgende commando uit:

mysql -u root -p < /usr/share/zm/db//zm_create.sql

Vervolgens wordt er op het wachtwoord van de MySQL gebruiker root gevraagd. De database met de tabellen voor ZoneMinder zijn nu gemaakt. We moeten nu nog de toegangsrechten voor de database en tabellen configureren.

Configuratie

Bekijk, als Linux gebruiker root, bestand /etc/zm.conf. Dit bestand bevat de configuratie-instellingen van ZoneMinder. Hierin staat onder andere de naam van de database server host (ZM_DB_HOST), de database naam (ZM_DB_NAME), de database gebruiker (ZM_DB_USER) en het bijbehorende wachtwoord (ZM_DB_PASS). Het is aan te raden om het wachtwoord aan te passen.

Voer vervolgens (als Linux gebruiker root) het volgende commando uit:

mysql -u root -p -e "grant all on zm.* to 'zmuser'@localhost identified by 'wachtwoord';"

Pas hier wederom wachtwoord aan naar het door jou gekozen wachtwoord (bij het uitvoeren van dit commando wordt gevraagd om het wachtwoord van de MySQL root gebruiker).

Nu dienen we nog de initialisatie van de ZoneMinder Database uit te voeren. Voer het commando zm_database_init uit. Dit commando zal eerst vragen om het wachtwoord van de MySQL root gebruiker en daarna een aantal vragen stellen. Beantwoord alle vragen met n.

De laatste stap is het ZoneMinder config bestand in Apache. De default instelling voor ZoneMinder is dat de images en events niet toegankelijk zijn. Deze moeten we nog toegankelijk maken, tenminste voor clients op het interne netwerk. Verander in /etc/apache2/conf.d/zm.conf voor de images en events directory Require all denied in Require ip 10.0.0 127.0.0 (verander de 10.0.0 netwerk range in de range binnen jouw netwerk).

Console

De installatie is nu voltooid. Ga met je browser naar http://localhost/zm. Hier zie je de ZoneMinder Console. In het midden bovenaan zie je dat ZoneMinder gestopt is. Door op Stopped te klikken, kun je ZoneMinder starten. Wil je echter dat ZoneMinder start als je systeem opgestart is? Voer dan in een terminal deze commando’s uit:

systemctl enable zm

systemctl start zm

Webcam

ZoneMinder doet het nu, dus we kunnen de camera’s koppelen. We beginnen met een webcam, waarvan bijna iedereen er wel eentje van heeft liggen. Plug de webcam in. Met het commando lsusb kunnen je zien of de webcam via USB gedetecteerd is door het OS. Als we aannemen dat dit device /dev/video0 is kun je (als root) met het commando zmu -d /dev/video0 -q -v de eigenschappen van deze webcam boven water halen.

In de Console klik je op Add New Monitor waarna een pop-up scherm verschijnt met 5 tabbladen. Op het tabblad General geef je deze webcam een zinnige naam, kies voor Source Type de waarde Local en Function zet je op Monitor. Zorg er ook voor dat de Enabled checkbox aan gevinkt staat. Vervolgens ga je naar het tabblad Source en zet je het Device Path op /dev/video0, Capture Method op Video for Linux version 2 en zet je de Capture Width & Height op de waardes, die de webcam ondersteund. Klik op Save. In de Console is nu de webcam te zien. Druk op de naam… en voilà!

IP-Camera

Webcams hebben door hun USB-kabel slechts gering nut. IP-camera’s daarentegen kun je via het lokale (thuis-)netwerk aanroepen. Hang de camera in je netwerk en zorg ervoor dat deze een vast IP-adres krijgt. IP-camera’s hebben meestal ook een interne webserver, zodat je op de camera kunt inloggen om onderhoud te plegen en de camera te configureren.

In dit voorbeeld nemen we aan dat het IP-adres van de IP-Camera 10.0.0.148 is en dat ZoneMinder in kan loggen op de camera als gebruiker zoneminder met wachtwoord security. Het path van de URL om beeld te krijgen is videostream.cgi?user=zoneminder&pwd=security.

In de Console klik je weer op Add New Monitor. Op het tabblad General geef je deze IP-Camera een zinnige naam, kies voor Source Type de waarde Remote en Function zet je op Monitor. Vink de Enabled checkbox aan. Op het tabblad Source zet je het Remote Protocol op HTTP en voor Remote Method selecteer je Simple. De Remote Host krijgt de waarde 10.0.0.148 en Capture Method wordt Video for Linux version 2. Capture Width & Height zet je op de waardes, die de IP-Camera ondersteund. Druk op Save.

Mobiele telefoon

Een mobiele telefoon of tablet zijn ook prima te gebruiken als camera voor ZoneMinder. Het enige wat je nodig hebt is een camera app. Op Android kun je met de IP Webcam app je telefoon of tablet gebruiken als camera voor ZoneMinder. Deze app is er in een gratis en betaalde versie.

Installeer de app op je telefoon en open de app. Selecteer de Video Preferences en noteer vervolgens de videoresolutie. Voor de Samsung S3, die ik hiervoor gebruik, is de resolutie 1280 x 720 pxiels. Vervolgens ga je terug naar het hoofdmenu en scroll je naar beneden. Bijna onderaan zie je een optie Stream on device boot. Als je deze optie selecteert, zal de telefoon of tablet, nadat het opgestart is, direct gaan streamen. Dit kan je ook manueel instellen. Selecteer hiervoor de laatste optie in de lijst: Start Server. De telefoon zal nu gaan streamen. Onder in het beeld van je telefoon zie je de URL. Deze zal lijken op http://10.0.0.202:8080.

Je gaat nu weer naar de Console van ZoneMinder (laat de telefoon/tablet streamen!) en toets Add New Monitor. Je krijgt weer de vijf tabbladen te zien. Op het General tab geef je deze camera een naam, Source Type wordt Remote en Function wordt Monitor. Vink Enabled aan. Op het tabblad Source zet je Remote Protocol op HTTP en Remote Method wordt Simple. De Remote Host wordt 10.0.0.202. Port zet je op 8080. Remote Host Path krijgt de waarde /video. Zet Capture Method op Video for Linux version 2 en zet de Capture Width & Height op de waardes, die je hebt gevonden op de app onder Video Resolutie. Klik hierna op Save.

Events

We hebben nu wel camera’s ingesteld, maar deze gebruiken we tot nu toe als monitor. ZoneMinder kent echter nog veel meer functies. Modect (MOtion DeteCTtion) is een functie, die de beelden analyseert en events genereert als er beweging is gedetecteerd. De Record functie zet de camera in constante opnamestand. Er vindt in deze functie geen detectie plaats van beweging. Mocord is vergelijkbaar met Record, maar bij detectie van beweging zal dit in het beeld worden aangegeven. Er is ook nog een speciale functie, genaamd Nodect (No DeteCTion). Deze functie is ontworpen om samen te werken met externe triggers. Er vindt geen detectie van beweging plaats en er wordt slechts opgenomen als een externe trigger dit vereist.

De functie van elke camera vind je weergegeven onder Function in de Console van ZoneMinder.

Het volgende wat we ons moeten afvragen is: wanneer moet ZoneMinder vinden dat er beweging is? ZoneMinder heeft hiervoor presets, die je eventueel later kunt aanpassen.

Klik onder Function in de Console op een camera. Verander nu de Function in Modect en klik op Save. Klik nu op de 0 onder Zones in de rij van de camera, die je geselecteerd hebt. Je ziet nu de livestream van de camera. Klik op de knop Add New Zone. Er opent een nieuw venster met alle gegevens, die gerelateerd zijn aan de nieuwe zone. Standaard wordt het hele beeld als zone genomen. Je kunt dit aanpassen op twee manieren. Elke hoek van de zone is weergegeven met een groen puntje. Je kunt dit puntje verslepen om de zone aan te passen. Tevens zie je dat in de tabel, onder het beeld, de coördinaten worden aangepast. De tweede methode is dat je direct de coördinaten aanpast. Het is maar net wat je het makkelijkst vindt.

Wil je geen vierhoek, maar een vijf-, zes- of andere veelhoek? Klik dan op het + teken in de coördinaten tabel. Je kunt zoveel punten toevoegen als je wilt. Het spreekt voor zich dat het – teken ervoor zorgt dat het punt wordt verwijderd.

Links van het camera beeld zie je de overige instellingen. Geef deze zone een naam en kies een preset. De presets spreken voor zichzelf. Als je een preset gekozen hebt, zie je dat vele andere velden automatisch worden ingevuld. Verander aan deze automatisch ingestelde waarden voor nu niets. Klik nu op Save om de instellingen actief te maken.

Je bent nu weer teruggekomen bij de livestream en je ziet nu de zone, die je hebt ingesteld. Je kunt zoveel zones instellen als je wilt. Als er nu beweging wordt gedetecteerd in de zone, dan zal er een event afgaan en wordt dit event opgenomen. Na enige tijd zal dit hopelijk het geval zijn (of anders moet je zelf nog even door het beeld lopen). Je ziet dan in de Console onder Events het aantal events dat gedetecteerd is. Door hierop te klikken, krijg je een overzicht van alle events. Je kunt dan naast deze lijst ook kiezen voor een tijdslijn.

We hebben tot nu toe gebruik gemaakt van de presets, maar we kunnen dit natuurlijk ook zelf definiëren. In de Wiki van ZoneMinder wordt hier diep, grondig en zeer duidelijk op in gegaan. Ik verwijs je dan ook graag naar deze uitleg (zie kader met links).

Je zult waarschijnlijk op je klompen aanvoelen dat ZoneMinder behoorlijk verliefd is op geheugen. ZoneMinder gebruikt mapped memory. Dit is standaard 50% van het fysieke geheugen. Als de mapped memory vol loopt, krijg je diverse vreemde foutmeldingen van ZoneMinder. In de Console van ZoneMinder staat aangegeven hoeveel procent mapped memory gebruikt wordt (/dev/shm).  Probeer het percentage Used niet boven de 70% uit te laten komen.

Tot slot

In dit artikel hebben we kort gekeken naar ZoneMinder om ons huis te beveiligen. We hebben alleen de bovenste laag aan mogelijkheden van ZoneMinder behandeld. Wil je voor jezelf of je bedrijf een degelijk en zeer rijk uitgerust beveiligingssysteem, dat ook nog eens open source is, dan is ZoneMinder je vriend. De documentatie van ZoneMinder is zeer uitvoerig en in de Wiki wordt op heel veel aspecten ingegaan. Je kunt met ZoneMinder een beveiligingssysteem maken op een (kleine) server, maar het ondersteund ook een cluster aan servers. Jouw hardware is het beperkende element, niet ZoneMinder. Veel plezier!