Arlo: dialogare con il sistema tramite bash

| |

Legare il sistema di telecamere Arlo (qui la recensione: Arlo Pro di Netgear, parliamo dell’incauto acquisto) a quello di riscaldamento tado° (qui la recensione: Il riscaldamento intelligente di casa secondo tado°) sfruttando l’ottima geolocazzazione di quest’ultimo mi è sembrata una buona idea, una facile vittoria portata a casa con IFTTT all’epoca dell’acquisto del prodotto di Netgear. Nel frattempo IFTTT ha iniziato a chiedere dei soldi per passare alla loro offerta Pro (ragionata per diventare abbastanza indispensabile quando si hanno diversi processi e controlli salvati nell’account) e ci si è messo anche uno strano ritardo di IFTTT che rileva l’attivazione dell’Home Mode troppo lentamente rispetto all’applicazione nativa di tado°. Il risultato è presto servito: Arlo inizia a fare il suo dovere segnalando la presenza di persone in casa (la nostra) anziché calmarsi e tornare a “dormire” quando si torna nell’area delimitata. Come risolvere? Parlando direttamente con il sistema Arlo, cosa non immediatamente semplice a causa della scarsa documentazione disponibile.

Arlo di Netgear, parliamo dell'incauto acquisto

Parto con il citare Roberto Gallea perché è grazie a un suo articolo se ho iniziato a interessarmi all’argomento decidendo di intraprendere fino in fondo la strada verso l’integrazione del controllo Arlo all’interno di quello che già avevo portato completamente in-house con la Synology Surveillance Station. Quello che manca all’articolo di Roberto sono una serie di riferimenti al nuovo URL principale di Arlo che è passato da quel vecchio arlo.netgear.com all’attuale my.arlo.com, al quale aggiungere alcuni accorgimenti riguardanti parte dell’header che ti servirà per presentarti al sito web di Arlo. Dato che i riferimenti alla documentazione – come detto in apertura articolo – scarseggiano, ho fortunatamente trovato un progetto su GitHub che mi ha permesso di capire come muovermi al meglio senza la necessità di adottare gli script in Python proposti da Jeffrey Walter.

Questione di Token

Rispetto al modulo Python proposto da Jeffrey, che si basa sull’utilizzo delle tue credenziali di accesso ai servizi Arlo, quello che io sono andato a fare è stato “fondere” le due proposte di Roberto e Jeffrey per ottenere un token che mi permettesse di muovermi agilmente per tutte le successive chiamate API verso il sistema di videosorveglianza. Ho usato il mio Raspberry Pi per tutti i test, al termine ho poi aggiornato lo script principale che si occupa di attivare o disattivare la videosorveglianza sul Synology in base alla registrazione dei MAC address sul mio router AVM. Puoi usare una finestra di terminale Linux o macOS senza problemi, puoi usare WML su Windows per raggiungere il medesimo scopo.

Apri terminale, copia e incolla quanto riportato di seguito avendo cura – prima di premere invio – di sostituire EMAIL e PASSWORD con – rispettivamente – l’email con la quale ti sei registrato ai servizi Arlo e la relativa password di accesso:

curl --request POST 'https://my.arlo.com/hmsweb/login/v2' \
-H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Mobile/15B202 NETGEAR/v1 (iOS Vuezone)' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'DNT: 1' -H 'schemaVersion: 1' \
-H 'Referer: https://my.arlo.com/' \
-d '{"email": "EMAIL","password": "PASSWORD"}'

Attenzione

Se hai l’autenticazione a due fattori attiva sul tuo account Arlo dovrai temporaneamente disabilitarla. Una volta ottenuto il token potrai immediatamente riabilitarla, diversamente non riuscirai a ottenere il token necessario per comandare le API di Arlo successivamente. Ho ragionato sull’uso di un account differente creato ad-hoc con una password molto robusta, autorizzato a vedere le telecamere di casa, non ha però funzionato perché questo account – essendo invitato – non avrà potere di intervenire sull’unità centrale di Arlo o sulle singole telecamere, serve quindi creare il token dell’account proprietario della Base Station Arlo che può quindi controllare ogni singola configurazione del prodotto.

Dovresti ottenere in risposta qualcosa di molto simile:

{"data":{"userId":"ABC123-456-78901234","email":"mario.rossi@contoso.com","token":"1_2aZ-b34Kfb5QWER-6ScN-XXx0X1xX23XxX_x4x56xxxx7x_X8X9xxxxxxXxxxXx0xX2XXxxXXXXxXXXxxxxx3Xx4xXXxxXX5xxXxxx_XxXxX6xXxX-xXXX67xxx8xx90x1xx23X4-XXxx5XxxXXxXXX6XxXXX7XXXxxx8XXX90Xx","authenticated":1234567890,"accountStatus":"registered","countryCode":"IT","tocUpdate":false,"policyUpdate":false,"appStore":{"updateLink":"https://apps.apple.com/us/app/arlo/id1459289784","enforce":true,"latestVersion":"2.16","enforceDate":1584169199},"validEmail":true,"arlo":true,"dateCreated":0000000000000,"mailProgramChecked":true},"success":true}

Si tratta di un output JSON, se aperto con un browser come Firefox potresti vederlo molto più in ordine e in maniera più comprensibile, tutto ciò che però ti interessa sapere, isolare e conservare è il valore di token. Copia su un editor di testo (Notepad++ o Atom quelli che ti consiglio sempre) quella lunga stringa esadecimale che si trova tra gli apici, nel caso dell’esempio qui sopra sarà quindi 1_2aZ-b34Kfb5QWER-6ScN-XXx0X1xX23XxX_x4x56xxxx7x_X8X9xxxxxxXxxxXx0xX2XXxxXXXXxXXXxxxxx3Xx4xXXxxXX5xxXxxx_XxXxX6xXxX-xXXX67xxx8xx90x1xx23X4-XXxx5XxxXXxXXX6XxXXX7XXXxxx8XXX90Xx. Ora che hai ottenuto il token puoi immediatamente riabilitare l’autenticazione a due fattori.

Dispositivi

Ci siamo. Ora che finalmente hai stabilito la connessione verso il sito web di Arlo puoi chiedere la lista di tutti i tuoi dispositivi così da poterli poi gestire successivamente. Per farlo ti basterà tornare sul terminale, copiare e incollare quanto riportato di seguito avendo cura – prima di premere invio – di sostituire il token che c’è dopo la voce Authorization:

curl --request GET 'https://my.arlo.com/hmsweb/users/devices' \
-H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Mobile/15B202 NETGEAR/v1 (iOS Vuezone)' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'DNT: 1' \
-H 'schemaVersion: 1' \
-H 'Referer: https://my.arlo.com/' \
-H 'Authorization: 1_2aZ-b34Kfb5QWER-6ScN-XXx0X1xX23XxX_x4x56xxxx7x_X8X9xxxxxxXxxxXx0xX2XXxxXXXXxXXXxxxxx3Xx4xXXxxXX5xxXxxx_XxXxX6xXxX-xXXX67xxx8xx90x1xx23X4-XXxx5XxxXXxXXX6XxXXX7XXXxxx8XXX90Xx'

Il risultato sarà molto più corposo rispetto alla risposta che ti arriva per fornirti il token. Quello che posso suggerirti di fare è di copiare tutto sul tuo editor di testo (nel mio caso Notepad++, ma anche Atom), salvare il file con il nome che ti pare ma con l’estensione .json. Così facendo potrai aprire questo file con Firefox e vederlo in maniera decisamente ordinata:

Arlo: dialogare con il sistema tramite bash

Il dispositivo 0 corrisponderà generalmente al gateway, l’unità centrale del tuo sistema Arlo casalingo. Da lì in poi si va solo in salita in maniera direttamente proporzionale al numero di telecamere sparse per casa. Il mio scopo è quello di attivare o disattivare il sistema nel momento in cui esco di casa (quindi dalla portata del mio segnale WiFi) o rientro (uno dei MAC Address dichiarati si registra nuovamente sul router). Ciò che quindi ti servirà per replicare il medesimo scenario è quindi il token, lo userId relativo al tuo utente, il deviceId della Base Station e il xCloudId della medesima. Tutti questi dati sono recuperabili già nel gruppo 0, prendine nota appoggiandoti sempre al tuo editor di testo preferito.

Arlo: dialogare con il sistema tramite bash 1

Ti ritroverai davanti a un risultato simile all’esempio di seguito:

  • Token: 1_2aZ-b34Kfb5QWER-6ScN-XXx0X1xX23XxX_x4x56xxxx7x_X8X9xxxxxxXxxxXx0xX2XXxxXXXXxXXXxxxxx3Xx4xXXxxXX5xxXxxx_XxXxX6xXxX-xXXX67xxx8xx90x1xx23X4-XXxx5XxxXXxXXX6XxXXX7XXXxxx8XXX90Xx
  • userId: ABC123-456-78901234
  • deviceId: 0AB12C3DE45F6
  • xCloudId: ABCDE-0123-456-789012345

Sei pronto a fare un paio di test con il tuo sistema Arlo.

Arm e Disarm di Arlo

Tempo di test, appunto. Hai tutto ciò che ti serve per comporre la tua richiesta da terminale. La tua prima prova consisterà nel disattivare Arlo. Per farlo puoi copiare e incollare quanto riportato di seguito avendo cura – prima di premere invio – di sostituire il token che c’è dopo la voce Authorization ma anche TUO_DEVICEID (occhio, il dato compare due volte, una nell’URL inizialmente contattato e l’altra subito dopo il “from“), TUO_XCLOUDID e TUO_USERID, quest’ultimo però dovrà poi terminare per “_web”, in pratica nel codice di seguito (usando l’esempio poco sopra) corrisponderebbe a ABC123-456-78901234_web:

curl --request POST 'https://my.arlo.com/hmsweb/users/devices/notify/TUO_DEVICEID' \
-H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Mobile/15B202 NETGEAR/v1 (iOS Vuezone)' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'DNT: 1' \
-H 'schemaVersion: 1' \
-H 'Referer: https://my.arlo.com/' \
-H 'Authorization: 1_2aZ-b34Kfb5QWER-6ScN-XXx0X1xX23XxX_x4x56xxxx7x_X8X9xxxxxxXxxxXx0xX2XXxxXXXXxXXXxxxxx3Xx4xXXxxXX5xxXxxx_XxXxX6xXxX-xXXX67xxx8xx90x1xx23X4-XXxx5XxxXXxXXX6XxXXX7XXXxxx8XXX90Xx' \
-H 'xcloudId: TUO_XCLOUDID' \
-d '{"from": "TUO_USERID_web","to": "TUO_DEVICEID","action": "set","resource": "modes","transId": "web!3975ac7b.ebb3a8!1504266382584",
    "publishResponse": true,"properties": {"active": "mode0"}}'

Lanciando il comando dovresti ottenere una risposta JSON di tipo “success“. Questo ti permetterà di capire che il sistema Arlo è stato disattivato come tua richiesta. Se vuoi invece provare ad attivare la rilevazione movimenti di Arlo ti basterà modificare quel mode0 (praticamente in chiusura di blocco cURL) con mode1, il mode1 equivale all’attivazione, il mode0 alla disattivazione.

Tutto chiaro? Funziona? Salvo errori ti assicuro che il metodo è funzionante e ampiamente sperimentato sul mio sistema Arlo Pro VMS4430.

Privacy per la singola videocamera

Presto detto. Così come per l’attivazione o disattivazione dell’intero sistema, esiste la possibilità di impostare il filtro Privacy per la singola videocamera. Ritengo che questo sia comodo perché nonostante il sistema possa essere disattivato, le telecamere continuano comunque a riprendere la scena “in diretta” se stimolate secondo tua configurazione. Recupera quel file JSON che avevi estratto prima e aperto poi con il tuo browser. Per ciascuna videocamera (i numeri da “1” in poi, NdA) noterai il campo deviceId. Prendi nota di ciascun deviceId per ogni videocamera posseduta, ti tornerà utile per metterle selettivamente sotto filtro Privacy.

Procediamo quindi con un esempio pratico ancora una volta da terminale:

curl --request POST 'https://my.arlo.com/hmsweb/users/devices/notify/TUO_DEVICEID' \
-H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Mobile/15B202 NETGEAR/v1 (iOS Vuezone)' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'DNT: 1' \
-H 'schemaVersion: 1' \
-H 'Referer: https://my.arlo.com/' \
-H 'Authorization: 2_5yLv_exwMqACMzqjeu69uh7Hh63mKOQu6njO0ZWg1cKawqqf0QPZ7xweNY6QagIAKctiDW9TwAAqAg5SsYiEFm4ybrR3zKu_q7cMPjP_F0U66vCJEnY43ycYihemKYpoqKyKH0etd5w6UtHmrZkpZKbGhwgD6CE0GSvZ95sjQlvz' \
-H 'xcloudId: TUO_XCLOUDID' \
-d '{"from": "TUO_USERID_web","to": "TUO_DEVICEID","action": "set","resource": "cameras/DEVICEID_SINGOLATELECAMERA","transId": "web!3975ac7b.ebb3a8!1504266382584","publishResponse": true,"properties": {"privacyActive": true}}'

Rimane tutto molto simile al precedente esempio quando ti ho fatto disattivare il sistema. Cosa cambia quindi? Facci bene caso: la risorsa ora è riferita alla singola telecamera, dovrai infatti modificare DEVICEID_SINGOLATELECAMERA con il reale deviceId che intendi mettere in modalità Privacy, al resto ci pensa quel "privacyActive": true che attiverà la funzione. Inutile dire che trasformando quel true in false la modalità Privacy della singola telecamera verrà disattivata e sarà nuovamente possibile godersi la diretta.

In conclusione

Tutto molto bello e spero più semplice per te che ti ritrovi il percorso già segnato e pronto per essere attraversato, io ci ho messo un po’ di più a portare a casa il risultato desiderato. Quello che ho chiaramente fatto è stato integrare la nuova scoperta con il mio script di Bash che già utilizzavo per pilotare la Synology Surveillance Station, rilasciando il nuovo aggiornamento su GitHub. Tutto ciò che dovrai fare sarà aprire switch_homemode.sh e compilare i campi relativi all’utilizzo di Arlo (con relativi messaggi da inviare via Telegram se hai abilitato la funzione), faccio quindi riferimento a ARLO_TOKEN, ARLO_USERID, BASESTATION_deviceId, BASESTATION_xcloudId, MSG_ARLO_ACTIVE e MSG_ARLO_INACTIVE.

Io ho poi deciso di modificare la schedulazione del controllo sul DSM che è passata dai vecchi 5 minuti al nuovo “ogni minuto” per permettere ad Arlo di entrare in funzione pressoché subito rispetto a quando ci si lascia casa alle spalle.Ho chiaramente spento ogni interazione con IFTTT lasciando a quest’ultimo il solo compito di notificarmi quando una batteria è scarica, penso di poter fare pure questo tramite API ma ci darò un’occhiata in futuro.

Se vuoi approfondire maggiormente l’argomento posso suggerirti di dare un’occhiata all’ottimo progetto di Jeffrey Walter su GitHub e in particolare allo script arlo.py che custodisce la pressoché totalità delle chiamate alle API di Netgear.

Io resto a disposizione per qualsiasi tuo dubbio in merito, l’area commenti è lì che ti aspetta.

#StaySafe

Gioxx's Wall

Se hai correzioni o suggerimenti puoi lasciare un commento nell'apposita area qui di seguito o contattarmi privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! Satispay / PayPal / Buy Me A Coffee / Patreon

Condividi l'articolo con i tuoi contatti: