Kamera-Stream aus "Synology Surveillance Station" in WebFront einbinden

Guten Abend!

Da ich heute ja am URL-sniffen usw. war, wegen einer anderen Baustelle, ist mir ein anderes Thema von meiner 2do-Liste eingefallen:
>> Einen Kamera-Stream von der „Synology Surveillance Station“ im WebFront einbinden :slight_smile:

Kurz gesnifft, im Forum gesucht, eine gute Vorarbeit von Christian (c.radi) gefunden, diese etwas korrigiert, ein wenig erweitert und das ist das Ergebnis :cool:
> Bitte nicht auf die Cam-Qualität und den Bildausschnitt achten, ich bin grad am „spielen“ und deshalb ist das Bild im Moment eher „suboptimal“ :smiley:

syno_cam.png

Sooo…ihr wollt das nachbauen? Kein Problem, hier kommt ein Beispiel-Skript mit einer kleinen Anleitung :cool:

Surveillance Station v7 und v8 >> Dieses Skript anpassen (user, pass, ip, …) und unter „/webfront/user/synology_cam1.php“ abspeichern:

<?
// Konfiguration
$user = "user";  // Synology Benutzer mit Berechtigung die Kamera anzuzeigen
$pass = "pass";  // Passwort zu eben eingegebenem Benutzer
$ip = "192.168.1.11";  // IP-Adresse eures Synology-NAS
$port = "5000";  // default Port der Surveillance Station
$cameraID = "1";  // ID der Kamera, welche angezeigt werden soll

// *** Eventuell müsst ihr die URLs von HTTP auf HTTPS anpassen, sofern ihr HTTPS aktiviert habt!

// Authentifizierung an Synology Surveillance Station WebAPI und auslesen der SID
$json = Sys_GetURLContent('http://'.$ip.':'.$port.'/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account='.$user.'&passwd='.$pass.'&session=SurveillanceStation&format=sid');
$obj = json_decode($json, true);
@$sid = $obj["data"]["sid"];

$Cam_Stream_URL = 'http://'.$ip.':'.$port.'/webapi/SurveillanceStation/videoStreaming.cgi?api=SYNO.SurveillanceStation.VideoStream&version=1&method=Stream&cameraId='.$cameraID.'&format=mjpeg&_sid='.$sid;

echo '<div class=\"centered\"><img src=$Cam_Stream_URL style=\"width:auto;height:auto;\" /></div>';
?>

Surveillance Station v6 >> Dieses Skript anpassen (user, pass, ip, …) und unter „/webfront/user/synology_cam1.php“ abspeichern:

<?
// Konfiguration
$user = "user";  // Synology Benutzer mit Berechtigung die Kamera anzuzeigen
$pass = "pass";  // Passwort zu eben eingegebenem Benutzer
$ip = "192.168.1.11";  // IP-Adresse eures Synology-NAS
$port = "5000";  // default Port der Surveillance Station
$cameraID = "1";  // ID der Kamera, welche angezeigt werden soll


// Authentifizierung an Synology Surveillance Station WebAPI und auslesen der SID
$json = Sys_GetURLContent('http://'.$ip.':'.$port.'/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account='.$user.'&passwd='.$pass.'&session=SurveillanceStation&format=sid');
$obj = json_decode($json, true);
@$sid = $obj["data"]["sid"];

$Cam_Stream_URL = 'http://'.$ip.':'.$port.'/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Streaming&method=LiveStream&version=1&cameraId='.$cameraID.'&_sid='.$sid;
// Wenn die 1. URL nicht funktioniert, dann mal auskommentieren und die folgende testen:
//$Cam_Stream_URL = 'http://'.$ip.':'.$port.'/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Streaming&method=LiveStream&version=1&cameraId='.$cameraID;

echo '<div class=\"centered\"><img src=$Cam_Stream_URL style=\"width:auto;height:auto;\" /></div>';
?>

Entweder könnt ihr direkt diese Seite noch selbst weiter gestalten und einfach als „externe Webseite“ im WebFront einbinden, ODER ihr legt euch eine String-Variable mit dem Profil „HTMLBox“ an mit folgendem Inhalt. Hier müsst ihr noch IP und PORT eures IPS-Server eintragen und könnt „width“ und „height“ auf euer WebFront anpassen:

<iframe width="400pixel" height="300pixel" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://IPS-IP:PORT/user/synology_cam1.php"></iframe>

…oder ihr arbeitet über einen WebHook in IPS (ab IPS v5) und passt das Script entsprechend an.

Danach nur noch die Variable an die gewünschte Stelle im WebFront verlinken und dann sollte das bei euch so ähnlich aussehen wie auf dem Screenshot oben im Beitrag :cool:

Zur Unterstützung bei der Fehlersuche, hier noch die Fehlercodes mit Erklärung (bei Authentifizierung):

100 Unknown error.
101 The account parameter is not specified.
400 Invalid password.
401 Guest or disabled account.
402 Permission denied.
403 One time password not specified.
404 One time password authenticate failed.

>> Hinweis >> Da immer wieder User den Fehler 400 haben, trotz richtigem Passwort >> Es liegt dann meist an den Sonderzeichen im Passwort! Also mal ein „einfacheres“ Passwort testen.

Man kann auf diesem Wege auch einen Snapshot des Kamera-Bildes auslesen und z.B. per E-Mail verschicken oder einfach nur abspeichern. Wer da noch Infos braucht > bitte melden, dann würde ich das, bei Bedarf, auch noch basteln.
Ebenfalls kann man Informationen über die Kamera auslesen (Modell, Auflösung, …). Zu mehr bin ich noch nicht gekommen, aber für den Anfang sollte das ausreichend sein :smiley:

Hab ich etwas vergessen? Ich hoffe nicht :slight_smile: Falls doch, einfach melden (mach ihr ja eh :stuck_out_tongue: ).

Grüße,
Chris

INFO - funktioniert auch mit aktueller SS 8.x

Du bist mein Held.

Das Thema hatte ich schon oft angegangen und wieder zur Seite gelegt.

Hast Du vielleicht auch eine Idee wie man die Bewegungserkennung aus der Surveillance bekommen kann?

Hier denke ich an einen offenen Socket der Info von der Synology bekommt.

Dann könnte ich die Go1984 entgültig ablösen.

Recht herzlichen Dank nochmals.

Hi Werner,

freut mich, dass ich momentan deinen Geschmack mit meinen Projekten treffe :smiley:

Ich habe mich mal in die API eingelesen. Da geht ALLES (Einstellungen setzen/auslesen/PTZ/…) mit der API :cool: Man kann sogar über SOAP Abfragen machen und das alles steuern/bedienen!!! :cool:

Und man könnte sogar, wie z.B. bei der Fritzbox, einen EventReceiver mit einem IPS-ServerSocket bauen und dann sich über allen Kram über SOAP Events (im JSON Format) informieren lassen :slight_smile:

This API provides a method to get authorized token of DS, and user can register push service by this token.

Allerdings muss ich auch ehrlich sagen > dazu ist mein KnowHow vmtl. nicht ausreichend :frowning:

Wenn aber jemand die Ahnung und die Muse hat sich damit zu beschäftigen und vlt. ein komplettes Projekt für die „Surveillance Station“ zu machen, dann bin ich gerne bereit zu unterstützen und alle notwendigen Informationen bereit zu stellen.

Grüße,
Chris

ABER lieber Werner, ich habe doch noch eine Lösung für dich gefunden :slight_smile:

Und die ist sogar extrem einfach einzurichten :wink:

Erstelle dir einfach in der Surveillance Station eine „Aktionsregel“ >> Synology Surveillance Station and rest - How Are You Using ISY? - Universal Devices Forum
> Und hier einfach über URL Aufrufe in deinem IPS Variablen schalten, da gab es doch ganz einfache Möglichkeiten, finde grad nur keinen passenden Post hier im Forum, aber du weißt sicher was ich meine :slight_smile:

Oder doch die Variante über die API und damit irgendwie verbinden >>
IPS Steuerung ect. mit ServerSocket und Register Variable

Grüße,
Chris

Ich werde die Tage versuchen für IPSCam eine „Component Class“ für die „Surveillance Station“ zu schreiben, mal sehen, ob ich das schaffe :smiley:

Zumindest die Grund-Features möchte ich hinbekommen mit Kamera-Stream wiedergeben, Snapshot erstellen und PTZ.

Grüße,
Chris

So die Streams sind schon mal in IPS. Somit kann meine VLC-Lösung rausfliegen und auf dem iPhone funktioniert es auch.

Genial.

Die Tage schaue ich mir das mit den Meldungen aus der Surveillance Richtung IPS an.

Danke nochmals.

P.S. IPSCam nutze ich nicht also ist mir die COMPONENT-Class relativ :rolleyes:

Klingt doch schon mal gut :slight_smile: Besser als VLC :rolleyes: :wink:

Schau dir das mal an mit den Aktionsregeln, da kannst du z.B. bei Erkennung von Bewegung in der Surveillance Station einen URL-Aufruf auslösen. Und mit einem URL-Aufruf eine Variable im IPS schalten, das ist ja einfach umzusetzen. Und dann nur noch die Variable mit einem Event überwachen und schon kannst du damit anstellen was du willst :slight_smile:

Grüße,
Chris

:slight_smile: wenn ich dein Kamerabild so anschaue wäre eine Frage ob du eine gute SW zur Fahrzeugplattenerkennung empfehlen kannst oder vielleicht sonst wer?:slight_smile: früher gab es was zu Blueiris aber das is nich mehr.

:smiley: Ne, sorry, kein Plan. Nachts erkennt man normal auch nichts, weil mit IR, da reflektieren die Kfz-Kennzeichen so sehr, da erkennt man nichts. Aber tagsüber… Ist mir aber auch nicht wichtig, ich poste ja nicht dauernd Bilder online :wink:

Grüße,
Chris

Hi Chris,

das klingt ja alles sehr vielversprechend und würde nahezu all meine Kamera/IPS-Probleme lösen :slight_smile:

Hab das gleich mal ausprobiert, aber das Ergebnis war leider noch nicht ganz so wie gedacht… Das Ergebnis
der Authentifizierung war

{„error“:{„code“:400},„success“:false}

Ich habe allerdings auch nicht die SS 7 sondern noch die 6.1 2893 … das kann ich wohl auch nicht ändern, da ich über die DSM 4.2 nicht rauskommen :frowning:

Gibt es da auch eine Möglichkeit oder muss ich mir eine neue Synology kaufen ?

grüße Frank

Geht auch bei der Surveillance Station 6.x :wink: Da sind nur die URLs ein klein wenig anders (wegen alter API). Ich bau gleich mal ein Skript…uno momento :slight_smile:

Grüße,
Chris

Hab im 1. Post ein Skript für die Surveillance Station v6 eingebaut. Bitte mal testen, da ich keine v6 zum Test habe und mir Bescheid geben :slight_smile:

Grüße,
Chris

hm - ich befürchte, ich habe noch etwas Erklärungsbedarf…

normalerweise lege ich die Scripte im Ordner Scripte ab und teste sie, indem ich sie aus der Konsole aufrufen oder ein entsprechendes Ereignis simuliere … warum muss das nun woanders hin und warum muss es diesen Namen haben ?
Wie rufe ich das Teil auf bzw was genau muss nun in die HTMLbox ?

lg Frank

Hi Frank,

eigentlich habe ich alles was du gefragt hast im 1. Post beschrieben. Einfach Schritt für Schritt nach meiner Anleitung vorgehen und dann sollte es klappen.

Die Datei habe ich so benannt, die könnte theoretisch jeden beliebigen Namen haben. Aber, ohne dir zu Nahe treten zu wollen, wenn du mit der Anleitung schon Probleme hast, dann solltest du vlt. auch den Namen beibehalten und alles, so wie von mir beschrieben, abarbeiten :wink: Ansonsten kannst du den Namen auch ändern, musst halt dann den Inhalt der HTMLBox entsprechend anpassen.

Lies dir meinen 1. Post nochmal ganz in Ruhe durch und befolge alles Schritt für Schritt, dann solltest du in Kürze einen Stream von deiner Kamera sehen :slight_smile:

Grüße,
Chris

ich hab ja alles so gemacht…auch den Namen gelassen :slight_smile:

Ich wollte ja nur verstehen, warum das Script dort stehen muss und klar, der Name des Scripts muss identisch mit dem in der URL sein.
So, trotzdem bekomme ich leider keinen Stream angezeigt und wenn ich ein echo auf die json-variable mache, bekomme ich immer noch die Fehlermeldung, die ich oben bereits beschrieben habe.

Mein Aufruf sieht so aus :

$id_stream = 22809;

$stream = '<iframe width="400pixel" height="300pixel" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://10.0.0.251:82/user/synology_cam1.php"></iframe>';

SetValue($id_stream, $stream);

und dein Script so:

 <?
// Konfiguration
$user = "XXX";  // Synology Benutzer mit Berechtigung die Kamera anzuzeigen
$pass = 'XXX';  // Passwort zu eben eingegebenem Benutzer
$ip = "10.0.0.2";  // IP-Adresse eures Synology-NAS
$port = "5000";  // default Port der Surveillance Station
$cameraID = "1";  // ID der Kamera, welche angezeigt werden soll


// *** Eventuell müsst ihr die URLs von HTTP auf HTTPS anpassen, sofern ihr HTTPS aktiviert habt!

// Authentifizierung an Synology Surveillance Station WebAPI und auslesen der SID
$json = Sys_GetURLContent('http://'.$ip.':'.$port.'/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=3&account='.$user.'&passwd='.$pass.'&session=SurveillanceStation&format=sid');

//echo $json;

$obj = json_decode($json, true);
@$sid = $obj["data"]["sid"];

$Cam_Stream_URL = 'http://'.$ip.':'.$port.'/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&method=Enable&version=3&cameraIds='.$cameraID.'&_sid='.$sid;


// echo "<div class=\"centered\"><img src=$Cam_Stream_URL style=\"width:auto;height:auto;\" /></div>";

Dein echo habe auskommentiert… was mache ich noch falsch oder kann ich überprüfen ?

Grüße Frank

Hier noch ein Bild von der Kamera-Konfiguration in der SS

Also das „echo „<div class=„centered“><img src=$Cam_Stream_URL style=„width:auto;height:auto;“ /></div>“;“ darf NICHT auskommentiert werden. Das ruft ja dann im Browser erst den Stream der Kamera auf :slight_smile:

Deshalb muss das Skript auch da liegen, wo ich geschrieben habe, weil das so im IPS nicht funktioniert.

>>> ERROR 400 = Falsches Passwort :wink:

Grüße,
Chris

PS @all: IPSCam Component Class ist schon fast fertig >> Stream funktioniert, Snapshot funktioniert, PTZ folgt :slight_smile:

so, echo-Kommentar entfernt und einen Benutzer mit einem Passwort ohne Sonderzeichen angelegt… der json-Zugriff
bringt jetzt ein „success“ :smiley:

Stream habe ich allerdings leider noch keinen - wie könnte ich noch weiter fahnden ?

Habe das Skript für die v6 im 1. Post angepasst. Bitte mal testen und Bescheid geben :slight_smile:

Grüße,
Chris

Ich habe jetzt die Änderungen übernommen, beide URLs ausprobiert - leider noch kein Stream - ich dachte heute Mittag erst, dass es vlt. noch an der Bandbreite liegt (UMTS) aber jetzt bin ich zuhause und es klappt auch nicht.
Kann das damit zusammenhängen, dass bei der Original-Url noch was vonn 3rdparty steht ?