community italiana di domotica personale
 
Realizzare un NVR (Network Video Recorder) per videosorveglianza con motionEye (parte 1)

Realizzare un NVR (Network Video Recorder) per videosorveglianza con motionEye (parte 1)

SCOPI DEL PROGETTO:
  • Realizzare un sistema di videosorveglianza personale con registrazione continua / a rilevazione movimento tramite il software “motion” e il frontend web “motionEye”
  • Livello di difficoltà: medio
  • Costo: variabile in base all’hardware in uso
CONCETTI AFFRONTATI:
  • Installazione e configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
  • motion / motionEye
  • Un sistema a scelta (spiegato a seguire):
    • Raspberry Pi OS (Raspbian)
    • Docker (generico)
    • Linux (generico)
    • Home Assistant OS
COMPONENTI FISICI UTILIZZATI:
  • Vari (vedi sotto “Requisiti”)
PROGETTO MAGGIORMENTE INDICATO PER:

Linux - Raspbian - Home Assistant HASSIO

NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione progetto: 2.6

videosorveglianza domotica

Abstract

Spesso, nei film, si vede qualche malintenzionato irrompere in luogo inaccessibile e, quale primo gesto che sceglie di fare (oltre a pronunciare qualche frase ad effetto), è quello di recarsi in uno sgabuzzino (perché lui sa quale!) per strappare via dei nastri o degli hard disk da un non ben non specificato computer, rack, armadio o quel che è.

Al di là di tutto, la cosa ha un senso. Nelle aziende (ma non solo) per la videosorveglianza si tende ad installare dei sistemi DVR/NVR, delle soluzioni concepite espressamente per la videoregistrazione a ciclo continuo di quello che le telecamere di sorveglianza riprendono nel perimetro previsto. I DVR (Digital Video Recorder) sono apparati di concezione più vecchia: prevedono tipicamente una registrazione su nastro (a volte disco) e utilizzano telecamere solitamente collegate via cavo; gli NVR (Network Video Recorder), invece, sono apparati di videoregistrazione digitale in grado di registrare su hard disk, NAS e Object Storage e che ricevono uno stream digitale direttamente da IP Cam (o Telecamere IP, Webcam eccetera).

Per dotarsi di un sistema di videosorveglianza domestica (o anche CCTV – Closed Circuit TV, ovvero sistemi televisivi a circuito chiuso) si opta solitamente per l’NVR (per una questione di modernità e di assenza di cablaggi). Le opzioni sono sostanzialmente due:

  • acquistare un sistema NVR all-in-one;
  • utilizzare componenti elementari (e di produttori diversi) per ottenere un risultato analogo (in alcuni casi superiore).

La prima opzione è certamente quella più facile: si acquista un sistema chiavi in mano, si installa e si vive tendenzialmente felici (e sicuri). Per lo più però si tratta di sistemi chiusi, concepiti per fare un mestiere e uno solo. Difficilmente si potrà utilizzare un sistema del genere in armonia con il resto della propria domotica personale, men che meno se si utilizza (cosa sempre consigliata) un HUB personale quale “ponte di comando”.

Per quanto riguarda la seconda opzione è bene conoscere varie soluzioni Open Source concepite per realizzare in proprio un NVR a partire di base da IP Cam di mercato (in grado di fornire flussi digitali su rete locale) e da un computer o un mini-computer.

In questo progetto vedremo come realizzare in proprio un NVR prendendo in analisi, quale software per la gestione NVR, la soluzione motionEye, molto conosciuta e diffusa. In realtà è improprio parlare del solo “motionEye”: quest’ultimo infatti è solo un frontend web il quale consente di interfacciarsi visivamente al motore vero e proprio, chiamato semplicemente “motion“.

Questo binomio (che da qui chiameremo per semplicità “motionEye”) consente di realizzare un vero e proprio NVR personale in grado di fare molte cose, tra le quali:

  • integrare a sé molte diverse tipologie di IP Cam / WebCam/ Telecamere USB;
  • videoregistrare in formato digitale a ciclo continuo oppure su rilevazione di movimento;
  • regolare in modo molto preciso la rilevazione di movimento (includendo/escludendo delle zone dell’immagine, effettuando filtri eccetera);
  • ritrasmettere i flussi video, variandone anche qualità e framerate;
  • catturare sequenze di immagini;
  • salvare le videoregistrazioni su disco locale, di rete, su cloud;
  • innescare notifiche;
  • disconnettere le proprie IP Cam dall’eventuale cloud del produttore;
  • definire una dashboard di visualizzazione con tutte le IP Cam (magari consultabile su uno schermo TV);
  • accedere da remoto agli stream video senza dover passare dall’app/cloud del produttore

e molto altro ancora.

In questa “parte 1” vedemo come scegliere la tipologia d’installazione e come provvedere al primo avvio del nostro NVR. Si consiglia una lettura attenta, perché gli argomenti sono molti e piuttosto articolati, anche se non particolarmente complessi. Nella “parte 2” andremo invece più a fondo rispetto alla sua configurazione e al suo uso quotidiano.

Come si vedrà, l’NVR realizzato sarà anche integrabile su Home Assistant o su altri HUB per domotica personale.

Si parte

Requisiti

Come detto, per dotarsi di un NVR basato su motionEye è necessario, di base, un computer e almeno una telecamera. Esistono poi, come vedremo, delle considerazioni secondarie che possono introdurre nella propria configurazione ulteriori componenti accessori.

Computer

Il software motionEye può essere eseguito virtualmente su qualunque sistema operativo. Ci sono però delle considerazioni molto importanti da tenere in considerazione rispetto alla scelta di dove eseguire il proprio NVR:

  • un NVR deve restare sempre acceso, quindi difficilmente è pensabile di utilizzare un computer tradizionale (a meno che, per suo uso, non stia per l’appunto sempre acceso) per una mera questione di assorbimento elettrico;
  • necessita di una certa potenza di calcolo e disponibilità di memoria RAM, in quanto il trattamento di flussi video tende ad essere un task relativamente pesante, specialmente quando si parla di alte risoluzioni e altri framerate.

Raspberry Pi 4 Model B - DettaglioIl nostro consiglio è pertanto quello di utilizzare mini-computer single-board come Raspberry Pi (il quale si presta anche a molto altro). Noi abbiamo testato il funzionamento col modello Raspberry Pi 3B+ con sistema operativo Raspberry Pi OS e non abbiamo avuto particolari probleminel gestire due flussi video in Full HD (inoltre sui computer era in esecuzione anche altro); il nostro consiglio, per stare tranquilli, è quello di utilizzare un Raspberry Pi 4B (meglio il modello con 4Gb di RAM), più che sufficiente a gestire un numero anche relativamente importante di telecamere. Sempre in termini di mini-computer, un’altra valida alternativa – consigliabile, se ci si aspetta prestazioni superiori, specie in presenza di più flussi video – sono gli Intel NUC e i Mini PC, i quali dispongono di potenza ancora maggiore rispetto a Raspberry Pi.

Altri modelli di mini-computer supportati dal progetto sono Banana Pi, Nanopi Neo2, Orange Pi One, Odroid C1/C1+/C2, Odroid XU4/XU4Q/HC1/HC2/MC1, Pine A64/A64+, ma non abbiamo avuto modo di testare la soluzione su questi modelli.

Le ulteriori alternative sono le più disparate, anche quelle di utilizzare un computer tradizionale ma, come detto, questo approccio non è consigliabile.

Telecamere

FOSCAM R2MDi IP Cam ce ne sono centinaia, migliaia di modelli diversi: da interno, da esterno, fisse o mobili, in grado di riprendere anche al buio, dotate di audio mono o bi-direzionale e tante, tante altre caratteristiche; ciò che accomuna moltissimi modelli di nuova (e relativamente nuova) generazione è la presenza di un servizio cloud offerto dal produttore tale da consentire all’utente di consultare facilmente la telecamera (o le telecamere) tramite il proprio smartphone/tablet quando si è lontani da casa. Altre, più vecchie, prevedevano invece una configurazione ad hoc del modem/router tale da consentire di raggiungere la/le IP Cam dall’esterno della propria rete. Il cloud ha sicuramente semplificato molte cose, per quanto porti con sé un indubbio tema di sicurezza e di privacy (cosa mitigabile dall’introduzione di un sistema NVR).

Il tema è ampissimo. Quel che è basilare, però, è che la telecamera utilizzata sia in grado di erogare un flusso video sulla rete LAN domestica. Prima di proseguire con il presente progetto (sia che abbiate già una o più IP Cam, sia che dobbiate acquistarla) a tal proposito consigliamo una lettura attenta di questa scheda, la quale sebbene prestata allo scopo spiega precisamente cosa si intenda per “flusso video su rete LAN” e come si faccia ad appurare se il modello che si possiede/che si vuole acquistare sia adatto o meno allo scopo. Tra le telecamere utilizzabili sono incluse tutte quelle in standard ONVIF, per lo meno quelle che riescano a fornire uno stream video raggiungibile in qualche modo via network (si faccia sempre riferimento alla scheda sopra linkata).

N.b. Non è necessario che le telecamere in uso siano necessariamente wireless Wi-Fi: possono infatti anche essere utilizzate telecamere collegate via cavo ethernet (quindi sempre su rete LAN) o anche direttamente connesse al computer sul quale è in esecuzione motionEye.

Per inciso, nei nostri test abbiamo utilizzato due cam YI con firmware modificato yi-hack-v4 (al fine di attivare un flusso video utile all’integrazione con motionEye), nonché una FOSCAM FI9902P. Inoltre, l’adozione di questo firmware ci ha consentito di disconnettere le IP Cam dal cloud del produttore, aumentando così la sicurezza e utilizzando solo motionEye per la consultazione, anche da remoto.

IP Cam piuttosto diffuse e utilizzabili allo scopo, oltre le YI sopracitate (che comunque necessitano di modifica firmware), sono le FOSCAM, le Ezviz, le D-Link e molte altre. Volendo, si possono utilizzare anche smartphone Android.

Accessori

Quanto visto sinora è sufficiente a modellare un proprio NVR perfettamente funzionante. Se si sceglie (come nel 90% dei casi) di adottare un Raspberry Pi è bene sapere che la possibilità di registrare in modo continuo gli stream video sulla sua microSD (l’hard disk del mini-computer) è impensabile: non tanto per una questione di spazio quanto per una questione di durata. Come noto, le microSD sono particolarmente sensibili alle scritture massive e tendono a rompersi. Se invece di scrive di tanto in tanto (immaginiamo che la registrazione venga impostata solo a fronte della sola rilevazione movimento), anche la sola microSD allora può essere forse sufficiente.

N.b. Se non si usa Raspberry Pi ma un computer o mini-computer dotato di hard disk tradizionale o SSD è possibile proseguire oltre, anche se si consiglia comunque di leggere il paragrafo dedicato alle NAS.

Una scelta saggia può essere quella di collegare un disco esterno via USB e usare quello per salvare le registrazioni; ulteriore alternativa è quella di usare una NAS (approfondito a seguire), nonché il cloud.

Disco esterno
Hard Disk
un “comune” hard disk.

Ad oggi le tecnologie disponibili sul mercato consumer tra le quali scegliere per l’adozione su Raspberry Pi (e non solo) sono essenzialmente tre:

  • hard disk tradizionali SATA;
  • hard disk SSD SATA;
  • hard disk SSD PCIe M.2.

Il primo caso tratta di dischi tradizionali ormai obsoleti e dunque citati solo per puro dovere di cronaca (che quindi non ci sentiamo di consigliare né tratteremo come oggetto del presente progetto).

Il secondo e il terzo caso rappresentano invece le strade da battere. I dischi SSD (genericamente detti) utilizzano tecnologie “allo stato solido” che stanno conquistando il mercato per grandi prestazioni, grande affidabilità e basso costo. Solitamente, questi dischi presentano un’interfaccia di connessione in standard Serial ATA o, brevemente, SATA. Quelli basati su interfaccia di connessione PCI-Express (PCIe) M.2, invece, sono versioni ulteriormente potenziate, dalle dimensioni ridotte e dal costo più alto, solitamente utilizzati su computer molto potenti.

Per montare un hard disk SSD su Raspberry Pi serve:

N.b. Oltre alla funzione di disco esterno, un disco aggiuntivo su Raspberry può anche essere usato direttamente come disco di boot al posto della microSD.
NAS
NAS
una NAS.

Alternativa all’adozione di un disco esterno è quella più “professionale” di dotarsi di una NAS, ovvero di “Network Attached Storage”. Si tratta di componenti che all’interno montano uno o più hard disk (di diverse dimensioni e prestazioni) e, fondamentalmente, li “espongono” alla rete LAN domestica, consentendo a più utenti e servizi di leggere e scrivere dati – solitamente su dischi molto grandi, configurati in modo da sostenere eventuali guasti (tramite le cosiddette configurazioni RAID). L’idea di associare a un NVR una NAS è sempre ottima: le NAS consumano poco e offrono grande sicurezza e prestazioni.

Anche di NAS ce ne sono moltissimi tipi; molte per lo più vengono vendute senza dischi, vuote, consentendo all’utente di installarvi poi i dischi che crede solitamente standard 3.5″ SATA. Altre, invece, vengono fornite già con i dischi a bordo di tagli diversi (solitamente in tagli da diversi terabyte).

Una volta installata la NAS sulla propria LAN sarà sufficiente, come vedremo, “puntare” la scrittura delle registrazioni video di motionEye direttamente sul percorso di rete della NAS, evitando così le scritture sul filesystem locale del computer (nel caso di Raspberry, della fragile microSD).

Di seguito le NAS testate da noi:

CLOUD

Come vedremo, motionEye permette anche di salvare le proprie registrazioni su cloud Dropbox o Google Drive. Si tratta di una possibilità, non di un obbligo. Ovviamente nessuno vieta di utilizzare altri processi che, alla scrittura dei filmati sul filesystem (quale che sia il filesystem) provveda poi a ricopiarli “da qualche parte” (magari su cloud non supportati, o su altre risorse storage di qualche tipo) per una maggiore sicurezza rispetto al non perdere le registrazioni.

Altro

Ultima considerazione va fatta rispetto alla rete. Specialmente in presenza di telecamere IP che trasmettano utilizzando la rete LAN (cablata o Wi-Fi), è consigliabile utilizzare modem/router ed eventuali apparati di transito (switch/hub ethernet, access point, repeater mesh e altro) ad alta velocità. Questo ovviamente è tanto più vero quante più sono le telecamere (e quindi i flussi video) che transiteranno verso (e, volendo, anche da) motionEye.

Come detto prima, abbiamo utilizzato un Raspberry Pi 3B+ e due IP Cam YI full-HD a 20fps, il tutto collegato via Wi-Fi tramite un modem/router AVM FRITZ!Box 7530 senza aver avuto alcun problema di prestazioni né per quanto riguarda l’NVR, né per quanto riguarda i restanti host e servizi presenti sulla LAN.

Installazione

motionEye si installa in molti modi; noi ne documenteremo sostanzialmente quattro:

  • come sistema operativo tramite distribuzione Linux motionEyeOS;
  • come applicativo Raspberry Pi OS (su Raspberry Pi);
  • come container Docker su Raspberry Pi OS o su Linux Debian (su Mini PC/Intel NUC o più genericamente su qualsiasi sistema x86/ARM che supporti Docker);
  • come add-on per Home Assistant OS.

La prima possibilità prevede l’implementazione di motionEyeOS, una distribuzione Linux “chiavi in mano” installabile  su diversi mini-computer, tra i quali Raspberry Pi. Come spiegato sopra, noi consigliamo l’uso di Raspberry Pi 4B o Raspberry Pi 3B+.

La seconda prevede l’installazione come semplice applicativo. Può essere installato sul sistema operativo Raspberry Pi OS di Raspberry Pi e su qualsiasi distribuzione Linux. Teoricamente (non lo abbiamo sperimentato), potrebbe girare anche su sistemi Windows e macOS.

La terza prevede l’istanziamento di motionEye come container Docker. Si tratta di un’opzione particolarmente apprezzabile per leggerezza. e praticità sia in fase iniziale sia durante l’operatività quotidiana. Può essere tecnicamente adottata su qualsiasi sistema operativo x86/ARM che supporti Docker.

La quarta prevede che gli utenti dell’HUB personale software per domotica Home Assistant OS beneficino di un add-on che consente una facile installazione di motionEye sullo stesso computer sul quale è in esecuzione l’HUB. Gli utenti che invece abbiano installato Home Assistant Core su un sistema Linux (diciamo Raspberry Pi OS, o altri) potranno seguire la sopracitata seconda strada.


Come detto, esistono altre alternative (come per esempio su Docker), ma non potendo documentare qualsiasi alternativa ci limiteremo a illustrare le tre metodologie sopra elencate.

Come sistema operativo motionEyeOS su Raspberry Pi

Si tratta della modalità più semplice, ovvero quella che “dedica” un intero micro-computer (Raspberry Pi o comunque uno qualunque tra i modelli supportati) alla funzione di NVR.

INSTALLAZIONE

Sostanzialmente si tratta di scaricare l’immagine del sistema operativo motionEyeOS appropriata per il proprio sistema da questo elenco (l’immagine non va decompressa: viene scaricato direttamente il file immagine), dopodiché è necessario utilizzare la solita procedura, ovvero quella di copiare il file dell’immagine sulla microSD di boot (paragrafo “Installare il sistema operativo“). Non si faccia caso al fatto che la guida linkata sia relativa al sistema operativo Raspberry Pi OS di Raspberry Pi: la procedura è sempre la stessa, cambia solo il file che si va a installare.

Al termine della copia del file d’immagine sulla microSD, abbandonare quella guida, inserire la microSD sul mini-computer, collegarlo via cavo ethernet alla rete domestica e accenderlo. Dopo pochi minuti motionEye sarà in esecuzione e sarà possibile collegarsi ad esso tramite l’indirizzo:

http://INDIRIZZO_IP_DEL_RASPBERRY

Scoprire l’IP assegnatogli dal router sarà facile tramite l’interfaccia web del proprio modem/router oppure con un qualsiasi tool di scansione reti (eg. Fing). Se l’IP assegnato sarà (per esempio) il 192.168.1.100, l’interfaccia web alla quale collegarsi sarà disponibile all’indirizzo http://192.168.1.100.

Dovrebbe apparire una schermata come segue:

motionEye - Primo login

L’username da utilizzare è “admin“, la password è inizialmente vuota. Cliccare su Login per avere accesso.

PERFEZIONAMENTO

Una volta ottenuto accesso, motionEye sarà sostanzialmente pronto. Cliccare in alto a sinistra (icona con tre righe orizzontali) per accedere al menu di configurazione dell’NVR.

Prima cosa da fare: impostare una password di accesso per l’utente amministratore; per farlo cliccare su “General Settings“:

motionEyeOS - General Settings

In questo pannello non è possibile solo impostare la password amministrativa (campo “Admin Password“), ma anche impostare il fuso orario, l’hostname, salvare e ripristinare la configurazione, spegnere o riavviare l’host.

Terminata la configurazione, cliccare in alto su “Apply“.

RETE Wi-FI

A questo punto è possibile configurare l’accesso del computer alla Wi-Fi, così da disconnettere il cavo ethernet (se si desidera, ovviamente); per farlo cliccare su “Network“:

motionEyeOS - Network

In questo pannello è possibile indicare il nome della propria Wi-Fi (Campo “Wireless Network Name“) e la relativa password d’accesso (campo “Wireless Network Key“).

Terminata la configurazione, cliccare in alto su “Apply” e attendere il riavvio del computer.


A questo punto motionEye sarà stato configurato (in modalità basica) e sarà possibile cominciare ad usarlo.

Come applicativo su Raspberry Pi OS

Se si dispone invece di un Raspberry Pi con sistema operativo Raspberry Pi OS (Raspbian) è possibile installare motionEye come applicativo. Per farlo è sufficiente eseguire da terminale (via SSH o collegati direttamente al mini-computer) i seguenti comandi:

sudo -i
apt install ffmpeg libmariadb3 libpq5 libmicrohttpd12
wget https://github.com/Motion-Project/motion/releases/download/release-4.3.2/pi_buster_motion_4.3.2-1_armhf.deb
dpkg -i pi_buster_motion_4.3.2-1_armhf.deb
apt install python-pip python-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libz-dev

Questo scaricherà il pacchetto di installazione di motionEye e provvederà a installare tutte le componenti (o per lo meno quelle mancanti) necessarie. Infine:

 pip install motioneye

installerà montionEye.

N.b. In caso l’installazione del modulo pyton-pillow fallisca, effettuarla a mano tramite il comando

apt install python-pillow

e poi provare a rilanciare il comando di installazione di motionEye.

Al termine è necessario creare delle cartelle e dei file di configurazione:

mkdir -p /etc/motioneye
cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf
mkdir -p /var/lib/motioneye

Infine, attivare il servizio presso Raspberry Pi OS ed avviarlo per la prima volta:

cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
systemctl daemon-reload
systemctl enable motioneye
systemctl start motioneye

Al termine dell’esecuzione dell’ultimo comando motionEye sarà in esecuzione e sarà possibile collegarsi ad esso tramite l’indirizzo:

http://INDIRIZZO_IP_DEL_RASPBERRY:8765

Scoprire l’IP assegnatogli dal router sarà facile tramite l’interfaccia web del proprio modem/router oppure con un qualsiasi tool di scansione reti (eg. Fing). Se l’IP assegnato sarà (per esempio) il 192.168.1.100, l’interfaccia web alla quale collegarsi sarà disponibile all’indirizzo http://192.168.1.100:8765. Comunque sia, se si sarà installato motionEye via SSH, l’IP sarà ovviamente lo stesso utilizzato per collegarsi al terminale. La porta rimane fissa, ovvero la 8765.

Dovrebbe apparire una schermata come segue:

motionEye - Primo login

L’username da utilizzare è “admin“, la password è inizialmente vuota. Cliccare su Login per avere accesso.

PERFEZIONAMENTO

Una volta ottenuto accesso, motionEye sarà sostanzialmente pronto. Cliccare in alto a sinistra (icona con tre righe orizzontali) per accedere al menu di configurazione dell’NVR.

Prima cosa da fare: impostare una password di accesso per l’utente amministratore; per farlo cliccare su “General Settings“:

motionEye - General Settings

In questo pannello è possibile impostare la password amministrativa (campo “Admin Password“) nonché quella di sorveglianza, sulla quale torneremo nella parte 2 di questo progetto.

Terminata la configurazione, cliccare in alto su “Apply“.


A questo punto motionEye sarà stato configurato (in modalità basica) e sarà possibile cominciare ad usarlo.

Come applicativo su Linux (generico)

Sulle altre distribuzioni Linux l’installazione non differisce molto da quella Raspberry Pi OS; ovviamente non è pensabile riportare ogni variazione e ogni specificità di ogni distribuzione Linux in questa sezione del progetto. Per tali installazioni, pertanto, rimandiamo alla lista di opzioni disponibili sul repository GitHub di motionEye.

Come container Docker (generico)

Al di là di Raspberry Pi con sistema operativo Raspberry Pi OS, qualunque sistema x86/ARM che supporti Docker può istanziare motionEye (Windows, macOS eccetera). Tutti i dettagli sul comando di lancio specifico in base al proprio sistema operativo sono disponibili qui.

Vetrina - Offerte del giorno

Come container Docker su Raspberry Pi OS

In questa modalità motionEye viene istanziato “chiavi in mano” come container Docker tramite un’istanza specifica.

In ambito Docker, l’istanziamento dell’applicazione può essere effettuato tramite esecuzione di un comando manuale (più immediato) oppure tramite una configurazione del tool di gestione Docker Compose, approccio inizialmente più ostico ma che consigliamo per tutta una serie di motivi. Entrambe le scelte sono valide, ma in prospettiva (specie in ottica di aggiornamento) imparare ad usare Docker Compose è altamente consigliato.

Prima di procedere – quale si la modalità di istanziamento – è necessario prima installare Docker su Raspberry Pi dotato di sistema operativo Raspberry Pi OS: le procedure sono illustrate in dettaglio in questa breve guida.

Con Docker in esecuzione è dunque possibile istanziare motionEye come container; prima di procedere, però, è necessario creare delle cartelle le quali conterranno la sua configurazione e i suoi file.

Una volta collegati via SSH al Raspberry Pi tramite utenza “pi“, provvedere a creare le cartelle:

mkdir -p ~/motioneye/storage

Provvediamo ora all’istanziamento vero e proprio dell’applicazione, utilizzando come spiegato prima o il comando “docker run” o la più versatile configurazione Docker Compose.

Tramite comando “docker run”

Istanziamo dunque motionEye su Docker tramite il comando:

docker run --init -d --name="motioneye" --hostname="motioneye" -v /etc/localtime:/etc/localtime:ro -v ~/motioneye:/etc/motioneye -v ~/motioneye/storage:/var/lib/motioneye --net=host --restart unless-stopped ccrisan/motioneye:master-armhf

Al termine, verifichiamo che tutto sia andato per il verso giusto:

docker logs motioneye

in fondo al log dovremmo trovare qualcosa come:

    INFO: hello! this is motionEye server x.xx.x
    INFO: main config file /etc/motioneye/motion.conf does not exist, using default values
    INFO: cleanup started
    INFO: wsswitch started
    INFO: tasks started
    INFO: mjpg client garbage collector started
    INFO: server started

Congratulazioni: motionEye è ora operativo. Saltare al paragrafo “primo accesso“.

Tramite Docker Compose

Se astutamente si sceglie di utilizzare Docker Compose, allora è semplicemente necessario aggiungere al proprio file docker-compose.yaml la seguente configurazione (sotto il bocco services):

  motioneye:
    container_name: motioneye
    image: ccrisan/motioneye:master-armhf
    volumes:
    - "/etc/localtime:/etc/localtime:ro"
    - "~/motioneye:/etc/motioneye"
    - "~/motioneye/storage:/var/lib/motioneye"
    network_mode: host
    restart: always

Una volta salvato il file docker-compose.yaml, eseguire il comando:

docker compose up -d

il quale provvederà a istanziare il container.

N.b. In caso il comando “docker compose” dovesse dare errore, verificare di non aver installata la versione applicativa di Docker Compose anzichè la versione plug-in alla quale il comando sopra fa riferimento. In tal caso, adeguare il comando da “docker compose” a “docker-compose” (col trattino in mezzo).

Lanciato il comando, attendere il completamente del primo avvio. Ci potrebbe volere un po’: per leggere in tempo reale i log e verificare quindi cosa stia succedendo all’interno del container, eseguire il comando:

sudo docker container logs motioneye -f

in fondo al log dovremmo trovare qualcosa come:

    INFO: hello! this is motionEye server x.xx.x
    INFO: main config file /etc/motioneye/motion.conf does not exist, using default values
    INFO: cleanup started
    INFO: wsswitch started
    INFO: tasks started
    INFO: mjpg client garbage collector started
    INFO: server started

Congratulazioni: motionEye è ora operativo.

Primo accesso

Una volta in esecuzione, sarà possibile collegarsi a motionEye tramite l’indirizzo:

http://INDIRIZZO_IP_DEL_RASPBERRY:8765

Scoprire l’IP assegnatogli dal router sarà facile tramite l’interfaccia web del proprio modem/router oppure con un qualsiasi tool di scansione reti (eg. Fing). Se l’IP assegnato sarà (per esempio) il 192.168.1.100, l’interfaccia web alla quale collegarsi sarà disponibile all’indirizzo http://192.168.1.100:8765. Comunque sia, se si sarà installato motionEye via SSH, l’IP sarà ovviamente lo stesso utilizzato per collegarsi al terminale. La porta rimane fissa, ovvero la 8765.

Dovrebbe apparire una schermata come segue:

motionEye - Primo login

L’username da utilizzare è “admin“, la password è inizialmente vuota. Cliccare su Login per avere accesso.

PERFEZIONAMENTO

Una volta ottenuto accesso, motionEye sarà sostanzialmente pronto. Cliccare in alto a sinistra (icona con tre righe orizzontali) per accedere al menu di configurazione dell’NVR.

Prima cosa da fare: impostare una password di accesso per l’utente amministratore; per farlo cliccare su “General Settings“:

motionEye - General Settings

In questo pannello è possibile impostare la password amministrativa (campo “Admin Password“) nonché quella di sorveglianza, sulla quale torneremo nella parte 2 di questo progetto.

Terminata la configurazione, cliccare in alto su “Apply“.


A questo punto motionEye sarà stato configurato (in modalità basica) e sarà possibile cominciare ad usarlo.

Come container Docker su Linux Debian

In questa modalità motionEye viene istanziato “chiavi in mano” come container Docker tramite un’istanza specifica.

In ambito Docker, l’istanziamento dell’applicazione può essere effettuato tramite esecuzione di un comando manuale (più immediato) oppure tramite una configurazione del tool di gestione Docker Compose, approccio inizialmente più ostico ma che consigliamo per tutta una serie di motivi. Entrambe le scelte sono valide, ma in prospettiva (specie in ottica di aggiornamento) imparare ad usare Docker Compose è altamente consigliato.

Prima di procedere – quale si la modalità di istanziamento – è necessario prima installare Docker su Linux Debian: le procedure sono illustrate in dettaglio in questa breve guida.

Con Docker in esecuzione è dunque possibile istanziare motionEye come container; prima di procedere, però, è necessario creare delle cartelle le quali conterranno la sua configurazione e i suoi file.

Una volta collegati via SSH a Linux Debian, provvedere a creare le cartelle:

mkdir -p ~/motioneye/storage

Provvediamo ora all’istanziamento vero e proprio dell’applicazione, utilizzando come spiegato prima o il comando “docker run” o la più versatile configurazione Docker Compose.

Tramite comando “docker run”

Istanziamo dunque motionEye su Docker tramite il comando:

docker run --init -d --name="motioneye" --hostname="motioneye" -v /etc/localtime:/etc/localtime:ro -v ~/motioneye:/etc/motioneye -v ~/motioneye/storage:/var/lib/motioneye --net=host --restart unless-stopped ccrisan/motioneye:master-amd64

Al termine, verifichiamo che tutto sia andato per il verso giusto:

docker logs motioneye

in fondo al log dovremmo trovare qualcosa come:

    INFO: hello! this is motionEye server x.xx.x
    INFO: main config file /etc/motioneye/motion.conf does not exist, using default values
    INFO: cleanup started
    INFO: wsswitch started
    INFO: tasks started
    INFO: mjpg client garbage collector started
    INFO: server started

Congratulazioni: motionEye è ora operativo. Saltare al paragrafo “primo accesso“.

Tramite Docker Compose

Se astutamente si sceglie di utilizzare Docker Compose, allora è semplicemente necessario aggiungere al proprio file docker-compose.yaml la seguente configurazione (sotto il bocco services):

  motioneye:
    container_name: motioneye
    image: ccrisan/motioneye:master-amd64 #oppure ccrisan/motioneye:master-armhf per sistemi ARM64
    volumes:
    - "/etc/localtime:/etc/localtime:ro"
    - "~/motioneye:/etc/motioneye"
    - "~/motioneye/storage:/var/lib/motioneye"
    network_mode: host
    restart: always

Una volta salvato il file docker-compose.yaml, eseguire il comando:

docker compose up -d

il quale provvederà a istanziare il container.

N.b. In caso il comando “docker compose” dovesse dare errore, verificare di non aver installata la versione applicativa di Docker Compose anzichè la versione plug-in alla quale il comando sopra fa riferimento. In tal caso, adeguare il comando da “docker compose” a “docker-compose” (col trattino in mezzo).

Lanciato il comando, attendere il completamente del primo avvio. Ci potrebbe volere un po’: per leggere in tempo reale i log e verificare quindi cosa stia succedendo all’interno del container, eseguire il comando:

sudo docker container logs motioneye -f

in fondo al log dovremmo trovare qualcosa come:

    INFO: hello! this is motionEye server x.xx.x
    INFO: main config file /etc/motioneye/motion.conf does not exist, using default values
    INFO: cleanup started
    INFO: wsswitch started
    INFO: tasks started
    INFO: mjpg client garbage collector started
    INFO: server started

Congratulazioni: motionEye è ora operativo.

Primo accesso

Una volta in esecuzione, sarà possibile collegarsi a motionEye tramite l’indirizzo:

http://INDIRIZZO_IP_DEL_SERVER:8765

Scoprire l’IP assegnatogli dal router sarà facile tramite l’interfaccia web del proprio modem/router oppure con un qualsiasi tool di scansione reti (eg. Fing). Se l’IP assegnato sarà (per esempio) il 192.168.1.100, l’interfaccia web alla quale collegarsi sarà disponibile all’indirizzo http://192.168.1.100:8765. Comunque sia, se si sarà installato motionEye via SSH, l’IP sarà ovviamente lo stesso utilizzato per collegarsi al terminale. La porta rimane fissa, ovvero la 8765.

Dovrebbe apparire una schermata come segue:

motionEye - Primo login

L’username da utilizzare è “admin“, la password è inizialmente vuota. Cliccare su Login per avere accesso.

PERFEZIONAMENTO

Una volta ottenuto accesso, motionEye sarà sostanzialmente pronto. Cliccare in alto a sinistra (icona con tre righe orizzontali) per accedere al menu di configurazione dell’NVR.

Prima cosa da fare: impostare una password di accesso per l’utente amministratore; per farlo cliccare su “General Settings“: in questo pannello è possibile impostare la password amministrativa (campo “Admin Password“) nonché quella di sorveglianza, sulla quale torneremo nella parte 2 di questo progetto.

Terminata la configurazione, cliccare in alto su “Apply“.


A questo punto motionEye sarà stato configurato (in modalità basica) e sarà possibile cominciare ad usarlo.

Come add-on Home Assistant OS

Se si utilizza, per la propria domotica, l’HUB personale Home Assistant OS (aka HassOS/HASSIO), dotarsi di motionEye è abbastanza semplice: c’è un add-on apposito. Per chi non lo sapesse, gli add-on sono dei componenti aggiuntivi per HassOS che si installano e configurano direttamente da interfaccia web (vedi qui quelli che riteniamo imprescindibili).

motionEye è quindi disponibile come add-on, il che permette di installare sullo stesso sistema hardware che ospita l’HUB anche le funzionalità di videosorveglianza (sempre tenendo a mente le considerazioni legate alle prestazioni).

ADD-ON

Recarsi alla voce “Impostazioni” > “Componenti aggiuntivi” e poi sul pulsante “Raccolta di componenti aggiuntivi” e cercare motionEye:

HASSIO Add-on - motionEye

Cliccarci sopra e, successivamente, cliccare su “INSTALLA“:

HASSIO Add-on - motionEye - Install

Una volta completata l’installazione, cliccare su “MOSTRA NELLA BARRA LATERALE” e poi su “AVVIO“.

Così facendo apparirà un’icona sulla barra laterale chiamata, ovviamente, “motionEye”: cliccarci sopra per accedere al frontend dell’NVR.

PERFEZIONAMENTO

Una volta acceduto, motionEye sarà sostanzialmente pronto. Cliccare in alto a sinistra (icona con tre righe orizzontali) per accedere al menu di configurazione dell’NVR.

Prima cosa da fare: impostare una password di accesso per l’utente amministratore; per farlo cliccare su “General Settings“:

HASSIO add-on - motionEye - General Settings

 

In questo pannello è possibile impostare la password amministrativa (campo “Admin Password“) nonché quella di sorveglianza, sulla quale torneremo nella parte 2 di questo progetto.

Terminata la configurazione, cliccare in alto su “Apply“.


A questo punto motionEye sarà stato configurato (in modalità basica) e sarà possibile cominciare ad usarlo.

Uso

Sostanzialmente il nostro NVR basato su motionEye è ora operativo. Ovviamente ciò che ancora manca è evidente: l’integrazione delle IP Cam, il comportamento da attuare a fronte di una rilevazione movimento, il salvataggio dei filmati, l’eventuale loro ritrasmissione e altro.

L’integrazione di una telecamera e a configurazione di motionEye e del suo motore di riconoscimento del movimento è illustrata nella seconda parte di questo progetto.

Realizzare un NVR (Network Video Recorder) per videosorveglianza con motionEye (parte 2)

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.