Hackeriamo le CAM Xiaomi Xiaofang e usiamo Motion EYE per visualizzarle in Home Assistant
di Luigi Duchi
22 Dicembre 2018
Home Assistant
Oggi parliamo del mondo Xiaomi, il nome di un'azienda che tutti gli amanti della domotica conoscono molto bene per la quantià di soluzioni che offre a prezzi decisamente accessibili. Nello specifico oggi parleremo delle IP cam Xiaofang.
Il termine IPcam non calza proprio alla perfezione su questi dispositivi, infatti le telecamere Xiaomi funzionano unicamente mediante Server proprietari obbligando gli utenti a transitare tramite il cloud Xiaomi per videosorvegliare i proprio appartamento. Questo, oltre a comportare rischi per la privacy, limita l'uso delle Cam esclusivamente all'app Mi Home.
Oggi vedremo come renderci indipendenti dall'ecosistema Xiaomi e come gestire le nostre telecamere mediante il flusso RTSP all'interno della nostra rete locale, con possibilità naturalmente di accedervi dall'esterno.
Apriamo prima una breve parentesi per elencare le caratteristiche della famosa cam Xiaomi Xiaofang
la Cam si presenta di forma cubica, dall'aspetto molto gradevole e dalle ridottissime dimensioni (L x P x A): 5.00 x 5.00 x 5.60 cm.
La risoluzione è FHD (1080P) grazie ad un Sensore CMOS da 1/2,7 pollici e zoom digitale 8X, Apertura F2.0, super-grand angolo FOV da 110 gradi, presenta a bordo anche dei led ir per la visione notturna o comunque per situazioni di scarsissima luminosità. Gode di Audio bidirezionale (in pratica per esempio puoi parlare con la famiglia quando non sei a casa) e supporto fino a 64GB di memoria aggiuntiva mediante lo slot per microsd.
Grazie alla staffa magnetica, può essere montata su qualsiasi superficie metallica. Nel caso si decida di metterla sottosopra si può ruotare l'immagine, quindi di fatto è posizionabile in ogni modo, offre infatti una testina snodabile che permette di installarla ovunque.
L'alimentazione è la classica microusb sul retro, 5V. Necessita, a tale tensione, di 1A per essere alimentata correttamente.
Vi ricordo che la Xiao Fang è acquistabile su Amazon al seguente link:
Ora che abbiamo fatto una panoramica, addentriamoci nel mondo dell'hacking per la piccola cam di casa Xiaomi.
Con gli ultimi firmware è preclusa la possibilità di caricare la modifica che ci serve sulle cam, quindi dovremo effettuare un downgrade del firmware; niente paura l'operazione è piuttosto semplice.
Vi occorrerà un micro SD da 16GB (in realtà basterebbe una da 2 GB ma ormai non si trovano più e se si trovano si trovano sono esattamente allo stesso prezzo, quindi va benissimo quella da 16 GB), la potrete reperire QUI .
Collegate la vostra sd e caricateci sopra il firmware più vecchio che permetterà la modifica, lo potrete scaricare QUI
Sarà necessario che sulla sd ci sia solo quel file, dovreste trovarvi in una situazione del genere:
Bene se avete già registrato la vostra cam Xiaomi sull'applicazione Mi Home cancellatela
staccate l'alimentazione alla vostra cam, inserite la sd con il firmware all'interno nell'apposito slot e premete (e tenete premuto) il pulsante reset.
Con il pulsante reset sempre premuto reinserite il cavo di alimentazione alla vostra cam continuando a tenere premuto il pulsante una volta alimentata per 10 secondi almeno.
A questo punto il vostro dispositivo avrà caricato il vecchio firmware.
Sempre con la sd all'interno aprite l'APP Mi Home e riaccoppiate il vostro dispositivo, vedrete che vi proporrà un aggiornamento firmware, ovviamente dovrete ignorarlo.
Arrivati a questo punto rimuovete la scheda sd dalla cam, lasciate il dispositivo connesso a Mi Home e prendete nota dell'indirizzo IP assegnato al vostro dispositivo, potrete farlo dalle impostazioni della cam o dalle impostazioni del vostro router. A proposito del vostro router vi consiglio di assegnare un ip fisso alla vostra cam o comunque di prenotare l'indirizzo ip per il dispositivo in modo che venga assegnato sempre il solito ad ogni riconnessione.
Reinserite nuovamente la sd nel computer e eliminate il firmware al suo interno.
A questo punto ci servirà un programma per estrarre un'immagine sulla sd. In ambiente windows vi consiglio di utilizzare Win32 Disk Imager scaricabile gratuitamente dalla rete, in ambiente Mac o Linux invece potrete utilizzare Etcher anch'esso reperibile gratuitamente in rete (Nel mio caso Etcher mi ha restituito un errore, ma probabilmente era un problema del mio Mac, ho risolto utilizzando Win32 Disk imager su windows.)
scaricate l'hack da QUI
Decomprimete il file.
Lanciate Win32 Disk Imager (o Etcher)
Fate clic sul pulsante sfoglia (browse), cercate e selezionate il file che avete appena decompresso.
Selezionate successivamente la vostra scheda sd come destinazione e successivamente selezionate il tasto scrivi (write)
Attendete la fine del processo.
Inserite la sd all'interno della vostra cam e attendete, dopo poco dovreste sentire un suono provenire dal dispositivo, indica che l'hack è stato caricato.
Se tutto è andato a buon fine digitando il seguente indirizzo all'interno di un browser web:
http://ipdella vostra camera/cgi-bin/status
ovviamente dovrete inserire l'ip della vostra cam ad esempio:
http://192.168.1.13/cgi-bin/status
dovreste trovarvi di fronte ad una schermata del genere:
Fate click su apply in alto a sinistra per attivare lo script dell'hack.
Nella schermata che vi comparirà a fine procedura cliccate su back
Cliccate su yes quando tornate alla schermata principale, vi servirà ad espandere il file system dell'hack su tutta la sd
Cliccate nuovamente su back arrivati alla schermata seguente
Adesso dovrete cliccare sul tasto reboot .
Arrivati davanti a questa schermata dovrete attendere un po' prima di premere back, vi consiglio circa 10 minuti (l'attesa varia a seconda della grandezza della sd.)
Una volta tornati nella pagina principale dell'hack potrete adesso:
settare ora e nome del dispositivo selezionando GMT-2:00 (per orario italiano). Cliccate su set per salvare.
Cliccate su manage script e controllate che la situazione sia la seguente, se così non fosse riattivate i servizi disattivi.
Spostatevi sul vostro router e aprite la porta 554 sia interna che esterna sull'indirizzo ip della vostra cam.
Benissimo non ci resta che provare il funzionamento.
Aprite l'applicazione VLC Player sul vostro pc/mac, se non lo avete reperitelo gratuitamente in rete.
Nelle impostazioni cliccate su apri rete:
e su url srcivete la seguente stringa rtsp://il vostro indirizzo ip/unicast (es. rtsp://192.168.1.13/unicast)
Vedrete comparire la vostra immagine con tanto di audio.
Adesso che abbiamo hackerato la nostra Xiaofang possiamo vederne il flusso rtsp tramite rete locale. Per vederla anche dall'esterno procedete come segue (ricordate abbiamo aperto la porta 554).
Create un account su di un servizio ddns (nel caso non abbiate una connessione ad internet con IP statico), vi consiglio di farlo con l'ormai collaudato Duck DNS
In questo caso il vostro indirizzo di flusso rtsp sarà una cosa del genere:
rtsp://vostroddns.duckdns.org:554/unicast
Cosi avrete accesso alla vostra telecamera anche dall'esterno.
Cosa accade se abbiamo più di una telecamera Xiaofang hackerata?
In questo caso dovremo aprire sul router tante porte esterne diverse quante sono le cam, ma con porta interna sempre 554
Il numero della porta esterna lo potete scegliere a piacere (a patto che quel numero non sia usato da un altro servizio)
es. cam1 - porta esterna 554 - porta interna 554
cam 2 - porta esterna 555 - porta interna 554
cam 3 - porta esterna 556 - porta interna 554
perciò i flussi rtsp diventeranno ad esempio cosi:
rtsp://vostroddns.duckdns.org:554/unicast
rtsp://vostroddns.duckdns.org:555/unicast
rtsp://vostroddns.duckdns.org:556/unicast
e così via aggiungendo altre cam.
vi consiglio un app android (non conosco la controparte per iOS ma una vale l'altra) per leggere tutti i flussi rtsp e poter visualizzare le vostre cam.
vi basterà aprire l'app e aggiungere tutti i vostri flussi rtsp ricavati. Avrete la possibilità di visionare le vostre cam con tanto di audio.
COME INSTALLARE MOTYON EYE SUL NOSTRO RASPBERRY:
Le cam possono essere gestite direttamente da Home Assistant come vedremo più avanti oppure, scelta che consiglio, potete installare (sempre sullo stesso Raspberry) un software dedicato alla gestione delle CAM di nome MOTION EYE
C'è anche un eventuale plug-in per chi utilizza hass.io
Come procedere
Aprite un terminale del vostro Raspbian e lanciate i seguenti comandi.
tutti i comandi vanno lanciato come amministratore, potremo inserire sudo prima di ogni comando, oppure diventare amministratore per tutta la sessione digitando la seguente stringa:
sudo -i
installa ffmpeg e v4l-utils con il seguente comando:
apt-get install ffmpeg v4l-utils
Installa libmariadbclient18e libpq5richiesto da motion:
apt-get install libmariadbclient18 libpq5
installa poi motion con questo comando:
wget https://github.com/Motion-Project/motion/releases/download/release-4.1.1/pi_stretch_motion_4.1.1-1_armhf.deb dpkg -i pi_stretch_motion_4.1.1-1_armhf.deb
installa le dipendenze dai repository:
apt-get install python-pip python-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libz-dev
Installare motioneye, che farà rientrare automaticamente le dipendenze Python (tornado, jinja2, pillowe pycurl)
pip install motioneye
Preparare la directory di configurazione:
mkdir -p /etc/motioneye cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf
Preparare la directory multimediale:
mkdir -p /var/lib/motioneye
Aggiungi uno script di init, configuralo per l'esecuzione all'avvio e avvia il motionEyeserver:
cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
poi:
systemctl daemon-reload
poi:
systemctl enable motioneye
poi:
systemctl start motioneye
ed infine per aggiornare motyon eye alla versione più recente digitate:
pip install motioneye --upgrade
ed infine:
systemctl restart motioneye
riavviate il vostro raspberry con il comando:
sudo reboot
A questo punto avrete a disposizione MotionEye, vi consiglio di collegarvi ad esso dal browser di qualsiasi computer in rete. Non fatelo dal raspberry in quanto non ha la potenza sufficiente per gestirlo e rischiereste di bloccarlo.
Perciò andate sul browser web di un altro pc e inserite il seguente indirizzo:
http://raspberrypi:8765/
vi ritroverete di fronte a questa schermata:
la username di default è admin (potrete cambiarla dopo)
la password lasciatela vuota e cliccate su login
nel menù a tendina cliccate su add camera
selezionate network camera dal menù a tendina che vi si presenterà vi troverete di fronte ad una schermata del genere
Inserite l'indirizzo come segue dove al posto delle xx mettete l'indirizzo ip della vostra cam.
rtsp://192.168.1.xx/unicast
selezionate il protocollo udp all'ultima voce e aggiungete la cam.
una volta aggiunta la cam potrete selezionare vari parametri come la risoluzione e il frame rate.
Una volta scelte le varie preferenze andate su video streaming, cliccate su streaming URL, prendete nota dell'indirizzo che visualizzate (vi servirà dopo per integrare le cam in Home Assistant). Fate questa operazione per ogni cam integrata in MotyonEye, noterete che l'indirizzo sarà diverso per ogni cam.
Le opzioni disponibili all'interno di questo software saranno diverse ed andranno dalla possibilità di registrare i video a quella di farvi notificare l'avvenuta rilevazione di un movimento anche mediante l'utilizzo di un comando mqtt che vi permetterà di attivare ad esempio in un allarme su Home Assistant. Di questo probabilmente parleremo in futuro.
Come integrare le nostre cam in Home Assistant
Apriamo prima una parentesi, Home assistant non è il massimo per gestire il flusso video delle cam, oltretutto non da neanche la possibilità di ascoltare l'audio della nostra videosorveglianza e l'immagine delle nostre Xiaofang sarà tutto tranne che fluida.
In ogni caso, recatevi sul vostro Home Assistant nel solto file configuration.yaml
scrivete la seguente stringa:
ffmpeg:
e poi aggiungete anche questa stringa:
camera: !include camera.yaml
create un file chiamato camera.yaml allo stesso livello di configuration.yaml e dentro inserite tutte le vostre cam con gli url che avete ricavato da motion eye come ad esempio:
- platform: ffmpeg
input: http://raspberrypi:8081
name: camera di prova
salvate e riavviate HA e potrete vedere le cam direttamente su Home Assistant.
Il mio consiglio è quello di utilizzare Motyon Eye per poter caricare qualsiasi tipo di IP cam, potendole cosi integrare in Home Assistant avendo la possibilità di configurare registrazione e motion detect.
Bene per questo articolo è tutto vi lascio al solito video di fine articolo. Buona visione!
Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.