Utiliser l’API de Synology Surveillance Station 7

Nouvel article pour les heureux propriétaires de serveurs Synology et de caméras IP.

Synology a mis à jour son API avec la nouvelle version 7 de SurveillanceStation, qui pour mémoire est un paquet officiel permettant de mettre en place un système de vidéo surveillance très abouti sur son NAS.

Cette nouvelle API est documenté dans ce PDF de 370 pages. Je l’héberge aussi sur mon serveur pour archive ici : Surveillance_Station_Web_API_v2.0.
D’ailleurs, Synology prend d’avantage soin des développeurs à présent, en leur consacrant une page dédiée.

Malgré les efforts de Synology pour assurer une compatibilité à long terme, un récent changement s’est avéré destructif. Contrairement à ce qui est indiqué dans la documentation (!) il faut passer à priori systématiquement par  /webapi/entry.cgi au lieu de  /webapi/SurveillanceStation/extrecord.cgi comme indiqué page 115 … Effectivement, on avait une jolie 404 et pour cause, il n’y a pas de extrecord.cgi  dans  /usr/syno/synoman/webapi/SurveillanceStation/ExternalRecording .

Autres changements au programme :

  • il faut à présent se logout lorsque l’on a terminé nos actions
  • la méthode pour récupérer les informations des caméras s’est considérablement enrichie (et malheureusement complexifié aussi)

Voici un exemple de script permettant d’activer ou désactiver l’enregistrement manuel de toutes vos caméras actives. Le paramètre $actionRecord  sert à choisir si l’on veut activer ou desactiver l’enregistrement. Vous pouvez simplement l’externaliser pour en faire un paramètre d’appel de votre script par  $_GET['action'] par exemple.

 

29 réponses à “Utiliser l’API de Synology Surveillance Station 7

    1. Bonjour BBR,

      Comme indiqué dans l’article :

      Le paramètre $actionRecord sert à choisir si l’on veut activer ou desactiver l’enregistrement.

      Tu peux par exemple enregistrer 2 fichiers, un avec la variable à start que tu appelera « activer_cam.php » par ex et son alter ego pour stoper l’enregistrement.
      Sinon un seul script avec la variable en $_GET que tu pourras alors appeler en http://ton_serveur/script_cam.php?action=start

  1. Merci pour ta réponse, mais ma question porte sur la commande pour activer/désactiver la caméra plutôt que sur arrêter/lancer l’enregistrement.
    Est-ce que tu peux m’aider?

    1. Tu devrais trouver ton bonheur dans l’API SYNO.SurveillanceStation.Camera « Enable method » décrite page 48 de la doc.

      1. Oui j’ai écrit ça pour désactiver mais ça ne fonctionne pas:

        $json_desactivate = file_get_contents($server.’/webapi/entry.cgi?cameraIds=’.$id_cam.’&api= »SYNO.SurveillanceStation.Camera »&version= »8″&method= »Disable »‘);
        $obj = json_decode($json_desactivate);
        if($obj->success != « true »){echo « error set off cam « .$id_cam;}else echo « Cam « .$id_cam. »disabled. »;

          1. Lis bien la doc, elle est très bien faite, avec de nombreux exemples.
            Fais des essais, trompes toi et apprends de tes erreurs. Tu as tous les éléments en main pour faire ton propre script.
            Je ne te ferais pas ton script 🙂

          2. Franchement, je lutte, un petit coup de main serait le bienvenue.

            Qu’est ce qui ne va pas dans ma commande :
            file_get_contents($server.’/webapi/SurveillanceStation/camera.cgi?api= »SYNO.SurveillanceStation.Camera »&method= »Enable »&version= »3″&cameraIds= »‘.$id_cam.' »‘);

            ?

          3. Peut etre trop de double quote, sinon essai d’ajouter le paramètre _sid
            peut etre aussi faut il passer par entry.cgi

          4. En fait aprés analyse les lignes de commandes me retourne une erreur 105 : « Insufficient user privilege ».

            Des idées?

  2. Bonjour,
    Très intéressant.
    Merci !
    Savez-vous si on peut de la même façon enclencher l’enregistrement sur détection de mouvement uniquement ?
    Merci

    1. Il faudrait regarder plus précisément la doc que j’ai indiquée dans l’article. En survolant le sommaire, aucune action ne m’a sauté au yeux répondant à ta question. Cependant, tu pourrais peut etre activer toujours tes caméras en detection de mouvement et les activer/desactiver via l’API.

      1. Merci.
        C’est en effet ce que je souhaiterais faire : Activer / désactiver les caméras de Surveillance Station via un script inspiré du tien.
        Quelqu’un a trouvé comment activer / désactiver ?
        Merci

  3. Dans le cas de configuration de plusieurs caméras, y a t’il une info à modifier sur les php pour éviter que l’enregistrement se lance sur toutes les caméras lorsqu’une seule doit enregistrer ?

    1. Pour cela, il faut avoir un minimum de notion d’algorithmie 🙂
      Il suffit d’enlever la boucle et de ne lancer l’action que sur la caméra souhaitée.

  4. bonjour xavier,

    j’ai mis en place un script php inspiré par le tiens qui marchait bien jusqu’à quelques jours. Depuis, ça ne marche plus, pas plus qu’en copiant ton script.
    Par contre, quand je lance à la main une commande d’authentification, ça fonctionne.
    Y-a-t-il eu des changements récents ?

    par exemple le message de retour après authentification « à la main »:
    {« data »:{« sid »: »TU.Hqzzzzzzzzzzzzz »}, »success »:true}

    merci de ton retour

    1. Salut jibn,
      Je n’ai pas constaté de regression de mon côté.
      Je suis sur une version 7.1-4110 actuellement.
      Le sid que tu obtiens est bizarre 🙂 C’est statistiquement hautement improbable d’avoir autant de fois la même lettre dans un hash !
      Je pencherai sur un bug de ton côté.
      cdt

  5. Rebonsoir,

    Pour le sid, c’est moi qui l’ai modifié, désolé si cela t’as induit en erreur.

    Je ne comprends pas non plus, je me demandais si la structure du message de retour n’avait pas changée ?
    C’est pas une piste ?

  6. rebonjour,

    je me réponds à moi-même, ça venait effectivement de ma config. L’adresse ip du serveur était bloquée dans les paramètres du pare-feu.

    bonne soirée

  7. Bonjour, quand je regarde dans le repertoire webapi ou webapi/surveillancestation quelques cgi sont présents mais pas l’intégralité des cgi stipulés dans le pdf api officiel de surveillance station.

    Je souhaite par exemple piloter un mouvement de camera (Page 109) et cela implique l’utilisation de ptz.cgi. J’ai une erreur 404 car ce fichier n’existe pas dans cet emplacement.

    Il est dans:
    @appstore/SurveillanceStation/ui/cgi/ptz.cgi

    Dois-je faire un lien symbolique ou copier les fichiers au bon emplacement ?

    Merci Beaucoup

  8. Bonjour,
    Merci pour cet exemple qui m’a permis de me mettre aux API de Synology.
    La question que je me pose est relatif au sid.
    Lorsque l’on s’est authentifié, (auth.cgi/Login) et récupéré son sid, est ce que vous savez s’il y a un timeout sur le sid (dans le cas ou il n’y a pas eu de delog).

    Merci

    1. Bonjour,

      Vous trouverez sans doute cette information dans l’outil que vous utiliserez pour adresser les API. Sinon, si vous implémentez les cookies, il y a des chances que la durée de vie du jeton coïncide avec la date d’expiration du cookie.
      Pour ma part, je n’ai pas eu à m’en soucier car je ne cherchais pas à garder une session en vie.

Laisser un commentaire

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