Die folgende Anleitung bezieht sich im zweiten Abschnitt auf https://github.com/ptagr/arlosrvc, einen Java-Service, der das Ein- und Ausschalten des Arlo Videoüberwachungssystems von Netgear ermöglicht, ohne die App zu benutzen oder sich mit dem Webservice verbinden zu müssen. Diese Lösung wurde angedacht, um über den Klick auf ein Desktop-Icon die Videoüberwachung scharf schalten und wieder abschalten zu können.
Die erste Variante zeigt, wie man das Script erstellt, wenn man den Java-Service nicht ständig aktiv halten kann, die zweite Variante funktioniert über einen dauerhaft laufenden Service auf einem Rechner oder einen NAS.
1. Steuerung per Script
Ich hatte dazu zunächst mit einem Script experimentiert und mir dazu die einzelnen Informationen aus dem Internet zusammen gesucht. Einige Blogger hatten bereits die Kommunikation des Arlo Web Portals analysiert und Login, sowie die Ermittlung der Device-IDs der Geräte und die ARM- und DISARM-Anforderung veröffentlicht.
Anmeldung
Mit einem Script bekommt man das Token, mit dem man sich bei den folgenden Aktionen identifizieren muss.
echo "--- Anmeldung ---" ARLO_CONNECT="$(curl -H "Content-Type: application/json;charset=UTF-8" -d '{"email":"<EMAIL-ADRESSE>;","password":"<PASSWORT>;"}' -X POST "https://arlo.netgear.com/hmsweb/login")" echo "CONNECT Ergebnis: "$ARLO_CONNECT echo echo "--- Kopiere Token ---" ARLO_TOKEN="$(echo ${ARLO_CONNECT:78:174})" echo "TOKEN Ergebnis: "$ARLO_TOKEN
<EMAL-ADRESSE> und <PASSWORT> wird dabei mit den Accountdaten ersetzt, die man auch im Arlo Web Portal verwendet. Die Startposition des Token hängt von der Länge der E-Mail-Adresse ab. Vergleicht man die Ausgaben von $ARLO_CONNECT und $ARLO_TOKEN, sieht man, wie der erste Parameter in echo ${ARLO_CONNECT:78:174} angepasst werden muss. Es gibt schönere Lösungen, aber für den einmaligen Aufwand reicht das 😉
Geräte IDs finden
Nun muss man einmalig die Geräte-IDs finden. Für die Kameras ist das die Serial Number, die man im Arlo Web Portal auch unter Settings -> <Kamera auswählen> -> Devive Info finden kann. Allerdings findet man dort keine Informationen zur Basis-Station und der XCLOUDID. Daher erweitert man das Script um
echo echo "--- Hole Device_IDs ---" ARLO_IDS="$(curl -H "Authorization: $ARLO_TOKEN" -X GET "https://arlo.netgear.com/hmsweb/users/devices")" echo "DEVICES Ergebnis: "$ARLO_IDS echo
In der Ausgabe sucht man nun die Werte für xCloudId (sie ist für alle Geräte gleich) und die deviceId der Basis-Station. Weiterhin benötigt werden die userId und die deviceIds (= Seriennummern) der Kameras, die man zur einfacheren Wiederverwendung in Variablen schreiben kann.
DEVICE_XCLOUDID="2TN524V-1820-183-470142614" DEVICE_BASE="4RD3817YA36DC" DEVICE_ID1="52M1815LBD3F9" DEVICE_ID2="52M1815KC05F7" DEVICE_ID3="52M1815XC074D"
Ein- und Ausschalten
Für den Schaltvorgang muss ein JSON-Objekt vorbereitet werden, das folgende Sytax hat:
{ "from":"<userId>_web", "to":"$DEVICE_BASE", "action":"set", "resource":"modes", "transId":"web!245.ebb3a8!1504266382584", "publishResponse":true, "properties": { "active":"<mode>" } }
Die <userId> wird durch den in der Anmeldung gefundenen Wert ersetzt. Der Wert für transId scheint nicht relevant zu sein und ist lediglich ein Zeitstempel. Er kann so übernommen werden. Das JSON-Objekt speichere ich zwecks Übersichtlichkeit ebenfalls in eine Variable und füge das an das Script an.
JSON_OBJECT="{"from":"EBXZ-183-47846310_web","to":"$DEVICE_BASE","action":"set","resource":"modes","transId":"web!019611306.aab573!7365209635128","publishResponse":true,"properties":{"active":"mode1"}}"
mode1 entspricht ARM und mode0 entspricht DISARM.
Damit sind alle notwedigen Daten vorhanden und das Komando kann an den Arlo Web Server gesendet werden.
echo echo "--- GO ---" curl -H "Content-Type: application/json;charset=UTF-8" \ -H "Authorization: $ARLO_TOKEN" -H "xcloudid: $DEVICE_XCLOUDID" \ -d "$JSON_OBJECT" \ -X POST "https://arlo.netgear.com/hmsweb/users/devices/notify/"$DEVICE_BASE
2. Lokalen Service arlosrvc nutzen
Steht ein ständig laufender Rechner zur Verfügung oder kann man auf seiner NAS einen Java-Service dauerhaft laufen lassen, dann übernimmt der arlosrvc die Aufgaben, so dass man mit zwei einfachen Scripten ein- oder ausschalten kann. Das kleine Projekt findet man unter
https://github.com/ptagr/arlosrvc .
Installation
Zur Installation auf einem dauerhaft laufenden Rechner geht man mit einem Terminal in das Verzeichnis (z.B. /srv), in das arlosrvc installiert werden soll.
:~$ sudo apt-get update :~$ sudo apt-get install git # falls noch nicht installiert :~$ sudo apt-get install npm # falls noch nicht installiert :~$ sudo apt-get install nodejs-legacy # falls noch nicht installiert :~$ git clone https://github.com/ptagr/arlosrvc.git :~$ cd arlosrvc :~$ sudo npm install
Der arlosrvc kann nun mit node /srv/arlosrvc/server.js gestartet werden. Allerdings stoppt der Server sobald man das Terminal schliesst.
Service dauerhaft im Hintergrund
Abhilfe schafft man, indem man den Service dauerhaft im Hintergrund laufen lässt. Entweder erstellt man einen syystemd-Service oder man installiert Forever, zumal npm nun auch bereits installiert ist. Eine ausführliche Ableitung findet sich -> hier.
:~$ sudo npm install forever -g
Jetzt genügt es, server.js mit Forever zu starten. Der Pfad bezieht sich auf die Angaben von oben.
:~$ sudo forever start /srv/arlosrvc/server.js
Steuern per Script
Für das Schalten werden die beiden Scripte benötigt, die auf der GutHub-Seite angegeben sind. Wird das Script auf einem anderen Rechner gestartet, muss localhost durch die IP des Rechners ersetzt werden, auf dem arlosrvc läuft. Zum Einschalten:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'username=ARLO_USERNAME&password=ARLO_PASSWORD&mode=mode1' "http://localhost:8080/api/arm"
Und zum Ausschalten:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'username=ARLO_USERNAME&password=ARLO_PASSWORD&mode=mode0' "http://localhost:8080/api/disarm"
Für diese beiden Scripte müssen jetzt nur noch die Desktop-Icons erstellt werden. Wie man das macht habe ich -> hier beschrieben.