HTML-Box für Synology-API-Funktionen

Ich habe 4 Kameras, von denen jeweils ein kleines Bild gezeigt wird + ein größeres Hauptfenster, welches wahlweise von einer der 4 Kameras bestückt wird.

Standbild erzeugen (getriggert durch Bewegungsmelder) :

<?


if(isset($IPS_EVENT))
   {
   $Event = IPS_GetEvent($IPS_EVENT);
   $Event_Trigger_ID = $Event['TriggerVariableID'];
   $Bewegung = GetValueBoolean(IPS_GetObjectIDByName('Bewegungsstatus', IPS_GetParent($Event_Trigger_ID)));
//   $IP_Adresse_ID =  IPS_GetObjectIDByName('IP-Adresse', IPS_GetParent($Event_Trigger_ID));
   $Kamera_ID = GetValueString(IPS_GetObjectIDByName('Syn-ID', IPS_GetParent($Event_Trigger_ID)));
   $Position_ID = IPS_GetObjectIDByName('Position', IPS_GetParent($Event_Trigger_ID));
   $Standbild_ID = IPS_GetObjectIDByName('Standbild', IPS_GetParent($Event_Trigger_ID));

   if ($Bewegung == true)
		{
      $json = Sys_GetURLContent('http://10.0.0.2:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=Login&session=SurveillanceStation&account=XXX&passwd=XXX');
      $obj = json_decode($json, true);
      @$sid = $obj["data"]["sid"];

      SetValueString($Standbild_ID,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=1&method=getSnapshot&cameraId='.$Kamera_ID.'&_sid='.$sid.' width="320" height="240">');

//		WFC_SendPopup(54929 /*[Hauptansicht]*/, $Kamera_ID, GetValueString(29338 /*[ Test\HTTP-Parameter\URL]*/));
      If (GetValueInteger($Position_ID) == GetValueInteger(22308 /*[Kameras\Hauptfenster-Auswahl]*/))     /* Auch im Hauptfenster ? */
         SetValueString(35866,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=1&method=getSnapshot&cameraId='.$Kamera_ID.'&_sid='.$sid.' width="640" height="480">');
      }

   }

?>

Wechsel des Hauptfensters bei gleichzeitiger Aktualisierung:

<?

switch($IPS_SENDER)
   {
   case "WebFront":
        SetValue($IPS_VARIABLE, $IPS_VALUE);
        $ProfileArray = IPS_GetVariableProfile ('Kamera-Auswahl');
        $Auswahlname = $ProfileArray['Associations'][$IPS_VALUE]['Name'];
        $Kamera_ID = GetValueString(IPS_GetObjectIDByName('Syn-ID',IPS_GetObjectIDByName($Auswahlname, 57385 /*[Kameras]*/)));
 //       $IP_Adresse_ID =  IPS_GetObjectIDByName('IP-Adresse', $Kamera_ID);
        $Standbild_ID =  IPS_GetObjectIDByName('Standbild', IPS_GetObjectIDByName($Auswahlname, 57385 /*[Kameras]*/));
        IPS_SetName(29945 /*[Webfront-Links\Hauptansicht\Kamera 0\Terrasse]*/, $Auswahlname);
        $json = Sys_GetURLContent('http://10.0.0.2:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=Login&session=SurveillanceStation&account=XXX&passwd=XXX');
        $obj = json_decode($json, true);
        @$sid = $obj["data"]["sid"];
        SetValueString($Standbild_ID,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=1&method=getSnapshot&cameraId='.$Kamera_ID.'&_sid='.$sid.' width="320" height="240">');
        SetValueString(35866,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=1&method=getSnapshot&cameraId='.$Kamera_ID.'&_sid='.$sid.' width="640" height="480">');

   }

?>

Aufnahme Starten/Stoppen:

<?

$json = Sys_GetURLContent('http://10.0.0.2:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=Login&session=SurveillanceStation&account=XXX&passwd=XXX');
$obj = json_decode($json, true);
@$sid = $obj["data"]["sid"];

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/extrecord.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId=1&action=start&_sid='.$sid.' width="320" height="240">');

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/extrecord.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId=1&action=stop&_sid='.$sid.' width="320" height="240">');


?>

Soweit die gute Nachrichten… Nachwievor schaffe ich es nicht den Livestream anzuzeigen. Wenn ich das

__http://10.0.0.2:5000/webapi/streaming.cgi?api=SYNO.SurveillanceStation.Streaming&method=LiveStream&version=1&cameraId=1

auf der Browserseite der SS direkt eingeben, kommt eine Synology-Seite mit der Meldung, dass er die Seite nicht gefunden hat. :confused:

Ich habe eine SS6 und eine SS7. getestet habe ich das aber bisher nur auf der SS7.

Grüße Frank

Kann es sein, dass du immer die SID vergisst? Die SID muss vor dem Stream-Abruf ausgelesen werden, weil die sich bei jeder Anmeldung ändert!

Und dann wäre für SS7 diese URL die richtige:

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

…mit SID :wink:

Grüße,
Chris

in dem Fall nicht - beim Aufruf von der SS-Seite ist die sid ja bereits im Browser offen und siehe da, mit deinem Link funktioniert es auch (ohne sid) …aber der format-Befehl hat bei mir gefehlt… ich habe die Doku dahingehend interpretiert, dass dies ein optionaler Parameter ist, aber scheinbar ist der zwingend… werde es nachher mal in IPS testen - vielen Dank für deine Hilfe :slight_smile:

Die Info stand von Anfang an in meiner Anleitung :wink: :smiley: Aber schön, dass es jetzt funktioniert.
>> Kamera-Stream aus „Synology Surveillance Station“ in WebFront einbinden

Grüße,
Chris

ja, stimmt … in der Original-Doku von Synology steht das leider nicht so drin :confused:

ich bau das jetzt mal in IPS ein und teste den Spass auch mal für die SS6

ähm… in der Original-Doku steht auch was von LiveStream - du hast VideoStream verwendet - vlt. sind das die Unterschiede zwischen der API von SS6 und SS7

Die API-Doku für die SS7 ist noch nicht verfügbar - siehe US-Forum
__http://forum.synology.com/enu/viewtopic.php?f=82&t=96559

Hallo zusammen,

ich fasse nochmal zusammen, was ich bisher getestet habe und soweit auch funktioniert hat. Ich habe mal zwischendurch die SS6 und die SS7 verwechselt, daher hier die nachgetesteten Ergebnisse:

SS6:

<?

$json = Sys_GetURLContent('http://10.0.0.2:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=Login&session=SurveillanceStation&account=XXX&passwd=XXX');
$obj = json_decode($json, true);
@$sid = $obj["data"]["sid"];

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/extrecord.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=2&cameraId=1&action=start&_sid='.$sid.' width="320" height="240">');

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/extrecord.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId=1&action=stop&_sid='.$sid.' width="320" height="240">');

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=1&method=getSnapshot&cameraId=1&_sid='.$sid.' width="320" height="240">');

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.2:5000/webapi/SurveillanceStation/videoStreaming.cgi?api=SYNO.SurveillanceStation.VideoStream&method=Stream&version=1&cameraId=1&format=mjpeg&_sid='.$sid.' width="320" height="240">');

?>

SS7:



<?

$json = Sys_GetURLContent('http://10.0.0.3:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=Login&session=SurveillanceStation&account=Surveillance&passwd=lancamtw5');
$obj = json_decode($json, true);
@$sid = $obj["data"]["sid"];

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.3:5000/webapi/entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=2&cameraId=1&action=start&_sid='.$sid.' width="320" height="240">');

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.3:5000/webapi/entry.cgi??api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=2&cameraId=1&action=stop&_sid='.$sid.' width="320" height="240">');

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.3:5000/webapi/entry.cgi?api=SYNO.SurveillanceStation.Camera&version=1&method=GetSnapshot&cameraId=1&_sid='.$sid.' width="320" height="240">');

SetValueString(14336 /*[ Test\Teststream]*/,'<img src=http://10.0.0.3:5000/webapi/SurveillanceStation/videoStreaming.cgi?api=SYNO.SurveillanceStation.VideoStream&method=Stream&version=1&cameraId=2&format=mjpeg&_sid='.$sid.' width="320" height="240">');

?>

Alle Befehle funktionierten aus dem IPS-Script-Verzeichnis heraus. Eine Auslagerung in das User-Verzeichnis war nicht erforderlich.
Ich bin noch am testen - insbesonders das Starten und Beenden von Aufnahmen funktioniert noch nicht so reibungslos wie ich mir das vorstelle. Ich bin auch noch am Analysieren, ob man zum Starten und Stoppen die gleiche sid benutzen muss oder ob das keine Rolle spielt.

chrissiboy

So, nach weiteren Tests habe ich einen seltsamen Effekt feststellen müssen:

Meine Stationen laufen in einem Domänen-Netz und sind in ein ActiveDirectory eingebunden. Seit ich diese Kamera-Zugriffe über die API-Schnittstelle mache, kommt irgendwann der Zeitpunkt, ab dem die Clients nicht mehr auf den Fileserver zugreifen können. Zwar funktioniert noch ein Ping und auf die Weboberfläche der Station komme ich auch, aber die Laufwerkszugriffe gehen nicht - Es kommt dann das Anmeldefenster aber mit einem Dpmänenkonto kann man sich nicht mehr anmelden.
Hat jemand schon einen ähnlichen Effekt bemerkt ? Der Einfachheit halber setze ich auch bei allen Zugriffen über die API eine neue SID. Kann es sein, dass es hier dann einen Überlauf gibt, denn ausloggen funktioniert so einfach nicht, da der Logout-Zugriff den Snapshot-Zugriff überholt und es dann zu keiner Bildanzeige mehr kommt :confused:
Hat jemand herausgefunden, wie lange so eine SID gültig ist und würde es evtl. reichen, sich beim Start von IPS sich eine ID zu besorgen und diese immer wieder zu benutzen ?

chrissiboy

Muhaha, das passiert, wenn man es „speziell“ löst :wink: :stuck_out_tongue:

Die SID ist für eine Sitzung gültig. Daher der Name „Session ID“ :wink: Machst du einen Snapshot und holst dir dabei die SID, wäre die weiterhin gültig, aber dann startest du eine neue Aufnahme, da holst du dir wohl eine neue SID, usw…
…also ist jeweils die alte SID nicht mehr gültig und du hast am Tag hunderte oder tausende Anmeldungen, da spielt das NAS dann wohl nicht mehr mit :smiley:

Vergleichbar mit einem Browserfenster. So lange du ein Fenster offen hast, musste dich nicht neu anmelden (außer du hast einen Timeout definiert), machst du aber einen neuen Browser auf, dann brauchste eine neue SID.

In deinem Fall wäre es wohl am schlausten, wenn du erstmal am Synology NAS prüfst, ob deine SID noch gültig ist (die kannst du ja in einer Variable, für alle deine Scripte, zwischenspeichern). Und wenn die SID nicht mehr gültig ist, erst dann eine neue SID holen :slight_smile:

Grüße,
Chris

nun gut - dann werde ich mal testen, wie lange meine SID gültig ist - das macht sich sicher auch positv bei der Performance bemerkbar… was meinst du mit speziell ? Nur, dass ich mir jedes Mal eine ID besorge oder ist noch was anderes speziell :confused:?

Grüße Frank