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.
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.
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
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.
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 ?
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
Pas mieux 🙁 :
cuv22CB1yjkME1540N4N425900
Warning: file_get_contents(http://192.168.0.10:5000/webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&version=2&method=list&_sid=cuv22CB1yjkME1540N4N425900): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /volume1/web/test.php on line 24 Warning: Invalid argument supplied for foreach() in /volume1/web/test.php on line 27
Bonjour Simon,
As-tu finalement réussi ? J’ai la même erreur… 🙁
Cdt
Bonne nouvelle, une nouvelle version du script est disponible : http://blog.rexave.net/?p=374
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
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
Bonjour,
Avez-vous eu un retour ?
Quand je teste un appel http://192.168.1.3:5000/webapi/auth.cgi?api=SYNO.API.Auth&method=login&version=2&session=SurveillanceStation&format=sid&account=xxxx&password=abcdefgh123, j’ai systématiquement un retour {« error »:{« code »:400}, »success »:false}
Est-ce la même chose de votre côté ?
J’ai ouvert un ticket chez Synology