RSS-Feed anzeigen

Matthieu's Gedankenstrudel

SurveillanceStation API: Einführung und Abrufen eines Standbildes

Bewerten
Zitat Zitat von Matthieu Beitrag anzeigen
Kleiner Tipp aus der Trickkiste: Wenn es schnell gehen muss, tuts auch das hier:
Code:
http://url-des-dsm/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=1&method=getSnapshot&cameraId=1
Ich habe mich in letzter Zeit etwas mit der SurveillanceStation API auseinandergesetzt, die von Synology ja mittlerweile auch entsprechend ausführlich dokumentiert ist. Damit lassen sich einige ziemlich interessante Dinge anstellen. Beim aktuellen Umfang ließe sich für viele Routineaufgaben bereits ein Client für den Desktop erarbeiten. Ich möchte mit ein paar Code-Schnippseln mal dazu einladen, sich selbst damit auseinanderzusetzen. Die Dokumentation von Synology gibts übrigens hier. Wenn man sich nicht weiter mit der Programmierung auseinandersetzen möchte, sind die meisten hier beschriebenen Schritte eigentlich nur das richtige Zusammensetzen von Links die man dann im Browser aufruft.

Schritt 1: Login und Logout
Bevor man wirklichen Zugang zur API bekommt, ist (glücklicherweise) ein Login notwendig. Dafür ist das Modul "SYNO.API.Auth" zuständig. Die absolut grundlegende URL dafür sieht wie folgt aus:
Code:
http://ip-der-ds:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=Login&session=SurveillanceStation
Daran müssen nun noch die folgenden Parameter angehängt werden (das Verfahren mit ? und & dürfte vielen aus der Webentwicklung z.B. mittels PHP bekannt sein):
account=Benutzername
passwd=Passwort

Ein einfaches Beispiel mit einer lokalen IP und erfundenen Zugangsdaten wäre dann:
Code:
http://192.168.1.2:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=Login&session=SurveillanceStation&account=admin&passwd=123456
Der Logout ist dem sehr ähnlich, allerdings fehlen nun die Angaben zu account und Passwort:
Code:
http://ip-der-ds:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=Logout&session=SurveillanceStation
Diese URL sollte man aber erst aufrufen, wenn mal alles getan hat was man wollte

Schritt 2: CameraId ermitteln
In dem oben zitierten Beitrag bin ich schon mal kurz auf die "CameraId" eingegangen. Die DS vergibt für jede Kamera eine Zahl. Soweit nicht dramatisch. Doch da die DS einmal vergebene IDs von (gelöschten) Kameras nicht neu vergibt, sollte man vorher schon mal nachsehen welche Kamera jetzt wirklich welche ID hat.
Die URL dafür ist (bis auf das einsetzen der IP) reines Copy&Paste:
Code:
http://ip-der-ds:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=3&method=List
Das gibt dann eine Seite formatiert mit JSON. Das sieht XML sehr ähnlich und lässt sich mit etwas Phantasie leicht interpretieren. Entscheiden ist, zum Namen der Kamera ("name") die richtige ID zu finden. Denn die wird für den weiteren Zugriff auf die Kamera zwingend benötigt.

Schritt 3: Das Standbild abrufen
Gräbt man sich durch die API-Beschreibung, findet man ca. ab Seite 25 die Methode "GetSnapshot".
Die URL sieht so aus (hier mit der cameraId 1):
Code:
http://ip-der-ds:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=1&method=getSnapshot&cameraId=1
Und siehe da: Nicht hübsch, aber genau das gewollte jpeg-Bild. Je nach Kreativität kann man daraus ein Skript basteln um eine Live-Webcam für die eigene Webseite bereitzustellen oder ähnliches.
Kategorien
Firmware

Kommentare

  1. Avatar von mega
    Wenn da ein Login nötig ist, um das Bild zu sehen, ist es doch nicht sooo einfach.
    Dann gibt der Login ein Cookie zurück, das man für die folgende Bild-Abfrage speichern muss.

    Ist zwar auch nicht all zu aufwändig (wenn man es mal fertig hat oder ne passende Klasse nimmt), aber man muss dann schon ein wenig http zu Fuß programmieren. file_get_coontents() reicht nicht.
    (Wie auch immer man auf die Idee kommt, APIs so umständlich zu machen, statt mit ner SessionID)


    Alternativ kann man vielen Kameras das Standbild direkt entlocken. Da reicht dann file_get_coontents() oder copy() mit user/pass in der url
  2. Avatar von Matthieu
    Hi mega,
    schau dir die Doku noch mal an. Man kann sich statt Cookie auch eine Session-ID geben lassen die man dann jedes Mal mit angibt wenn ich es richtig verstanden habe. Das sollte es deutlich einfacher machen.

    MfG Matthieu
  3. Avatar von wgreipl
    Hallo Matthieu,

    hast Du das vielleicht deine Lösung schon soweit erweitert das Du auch einen Stream der Kameras bekommst?

    Ich möchte gerne via SurveillanceStation auf den Stream zugreifen und nicht direkt auf die Kameras.

    Lg

    Werner
  4. Avatar von BOfH73
    Hallo Matthieu,

    mit dem Parameter _sid=<session-id> kannst du nach der Authentifizierung die Kameraliste abrufen.

    z.B.

    http://X.X.X.X/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&ver sion=3&_sid=<session-id>&method=List

    LG

    Teasy...
  5. Avatar von Semilio
    Hallo
    Ich habe eine 114 mit DSM 5.0
    wenn ich
    "http://192.168.178.22:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&ver %20sion=3&_sid=%3Csession-id%3E&method=List"

    eingebe erhalte ich

    {"error":{"code":101},"success":false}

    Weiß jemand an was das liegt ?
  6. Avatar von loleke
    Ich habe das selbe problem wie "Semilio".....

    Hat schon jemand ne Lösung gefunden?
  7. Avatar von chrissiboy
    Hallo,

    ich habe das gleiche mal ausprobiert mit einer TrenNET IP310PI unter SS 6.x und SS 7 und es hat auf Anhieb funktioniert. Ich habe die SS im Browser geöffnet und die Url eingegeben. Nun wollte ich das gleiche mit dem Livestream machen, aber der Erfolg war leider ernüchternd. Der Browser verfing sich bei folgender Url in einer Endlosschleife und öffnete bis zum Abbruch über den Taskmanager hunderte dieser Dialoge
    ... das mit dem Bild klappt irgendwie nicht... dann so : Sie wollen die datei streaming.cgi öffnen - wie soll Firefox damit umgehen ?

    "http://10.0.0.2:5000/webapi/SurveillanceStation/streaming.cgi?api=SYNO.SurveillanceStation.Streami ng&version=1&method=Livestream&cameraId=1"

    Kann mir jemand sagen, was da falsch ist ?
    Aktualisiert: 25.03.2015 um 21:49 von chrissiboy