Utilisation de l’API Synology Surveillance Station

La Surveillance Station de Synology est très complète, elle permet notamment de programmer des plages horaires sur lesquelles activer l’enregistrement ou la détection de mouvement.

Programmation horaire de la Synology Surveillance Station
Programmation horaire de la Synology Surveillance Station

Cependant, cette programmation n’est pas toujours suffisante. En effet, je ne souhaite pas être tout le temps enregistré lorsque je suis chez moi; de plus la grande quantité de vidéos produite sera difficile à analyser, classer et nettoyer …

J’ai donc cherché un moyen pour coupler l’enregistrement des caméras avec mon système domotique (qui me sert également de système d’alarme).

L’objectif est de lancer l’enregistrement des caméras lorsque j’active l’alarme et de l’arrêter lorsque je désactive le système d’alarme.

Synology met à disposition une API très bien documentée, même si le principe général est un peu farfelu et difficile à appréhender de prime abord. C’est pourquoi j’écris ce billet : afin de vous simplifier la tâche ! [Sauvegarde locale de la documentation de l’API en version 1.3 2014]

Voici un script écrit en PHP qui permet de lancer l’enregistrement manuel sur toutes les caméras actives sur le système:

<?php

$server = "http://localhost:5000";
$login = "loginSYNO";
$pass = "passwordSYNO";

/* API VERSIONS */
//SYNO.API.Auth
$vAuth = 2;
//SYNO.SurveillanceStation.Camera
$vCamera = 2;
//SYNO.SurveillanceStation.ExternalRecording
$vExternalRecording = 2;

$json = file_get_contents($server.'/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version='.$vAuth.'&account='.$login.'&passwd='.$pass.'&session=SurveillanceStation&format=sid');
$obj = json_decode($json);
if($obj->success != "true"){
	echo "error";
	exit();
}else{
	//authentification successful
	$sid = $obj->data->sid;
	echo '<p>'.$sid.'</p>';
	
	//list of known cams 
	$json = file_get_contents($server.'/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version='.$vCamera.'&method=list&_sid='.$sid);
	$obj = json_decode($json);

	foreach($obj->data->cameras as $cam){
		$id_cam = $cam->id;
		//check if cam is activated and not recording
		if($cam->enabled && !$cam->recStatus) {
			$json = file_get_contents($server.'/webapi/SurveillanceStation/extrecord.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version='.$vExternalRecording.'&cameraId='.$id_cam.'&action=start&_sid='.$sid);
			$obj = json_decode($json);
			if($obj->success != "true"){echo "error set record on cam ".$id_cam;}else echo "<p>Cam ".$id_cam." is recording</p>";
		}
		else{
			echo "<p>Cam " . $id_cam . " skipped</p>";
		}
	}
}

Information : une nouvelle version de ce script pour SurveillanceStation 7 est disponible sur cet article.

Ce script peut être hébergé sur le syno dans la Web Station et permet donc d’activer l’enregistrement sur les caméras à l’aide d’une simple requête HTTP. Vous pourrez facilement alors appeler cette URL depuis votre box domotique préférée (comme une ZiBase par ex) ou votre solution perso en cURL par exemple.

10 thoughts to “Utilisation de l’API Synology Surveillance Station”

  1. Bonjour,

    Pourriez-vous davantage détailler les étapes pour mettre en place ce script dans Web Station? Web Station est activé sur mon Synology et j’y ai placé de fichier sous la forme d’un fichier alarm.html que j’invoque via l’URL mon_nas/alarm.html
    La page est chargée mais renvoie le code sous forme de texte.

    Merci

    1. Bonjour Gron,

      Le fichier doit etre enregistré sous la forme d’un fichier php pour etre interprété, comme lancer_alarme.php par exemple.
      L’extension PHP doit etre activée dans web station.

      1. Bonjour Carl,

        J’ai mis en place votre script mais quand je le lance j’ai ce message d’erreur :

        XRyE1tZZnddEo1540N4N425900

        Warning: file_get_contents(https://localhost:5001/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=2&method=list&_sid=XRyE1tZZnddEo1540N4N425900): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /volume1/web/test.php on line 26 Warning: Invalid argument supplied for foreach() in /volume1/web/test.php on line 29

        Pour info, j’ai mis la dernière version de Surveillance Station 7.1

        Avez vous une idée de ce qui bloque ?

        1. Bonjour Simon,

          Essai d’adresser ton NAS en http sur port 5000 au lieu de https sur 5001. Le script est exécuté localement, tu n’as aucune chance d’etre intercepté, donc inutile de crypter le flux.

          cdt

  2. Est-il possible d’intégrer surveillance station dans un page web pour permettre à mes membres de mon site web de voir les cam ip ?
    Si non , savez-vous comment faire pour permettre le visionnage des cam ip sur mon site pour 100 viewers?
    Merci

  3. Bonjour
    Le script PHP ne marche plus car j’ai un probléme pour récuprer le SID (toujours en erreur) alors qu’il y a quelques mois ca marché. Une idée ?
    Merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *