Tuto Surveillance Station
#1
EDIT du 06/12/2017
la version initialement proposée est valable jusqu'au firmware 2.0.142 du serveur.
A partir de la version 2.0.143, quand le HTTP connecteur retourne <true>, en fait c'est 1 maintenant (et 0 au lieu de <false>.
Ceci est utilisé dans l'automate <SS_Actions> qui vérifie à 3 endroit le <success> de l'opération, et dans l'automate <SS_Status> pour vérifier si la camera est Enabled (ou pas)
Je n'ai pas adapté le fichier pdf, il faut donc lire ceci et adapter si vous êtes concerné.
-------------------------------------------------------------------------------------------------------------------------------
Tout d'abord, un grand merci à Grichka, sans l'aide de qui je ne serais jamais arrivé au terme de ce projet.
 
Note : étant donné le nombre important de copies d'écran, il y a en pièce jointe un fichier pdf avec ce texte complet ET les images. J'y ai également joint un second fichier .zip contenant les icônes pour illuster les automates, etc.
 
L'idée est donc de construire une solution qui permettra de contrôler les caméras branchées sur un NAS Synology. Donc également en protocole H.264 ;-)
 
Pour chaque caméra vous aurez :
  • Son ID
  • Son nom
Vous pourrez également :
  • l'activer / la désactiver
  • Démarrer / arrêter un enregistrement
  • Avoir un retour de son statut en temps réel (délais = 5 secondes)
 
Connecteur
Il faut d'abord créer un connecteur universel http: (Universel -> TCP/IP Universel -> Universel HTTP)

Et y importer (en cliquant sur le bouton encadré en rouge ci-dessus) le code JavaScript ci-dessous
 
maxcameras = 4
obj = JSON.parse(trame)
if (typeof obj.data != "undefined") {
// Update SID
if (typeof obj.data.sid != "undefined") {
Idsession = obj.data.sid
ldprint ("ID : " + Idsession)
// Status of cameras
} else if (typeof obj.data.total != "undefined") {
ldprint ("data.total (cameras) : " + obj.data.total)
if (obj.data.total > maxcameras) {
total = maxcameras
} else {
total = obj.data.total
}
ldprint ("total = " + total)
for (i=0; i < total; i++) {
ldprint ("data.cameras[" + i + "].id : " + obj.data.cameras[i].id)
eval ("Cameras" + i + "_id = obj.data.cameras[" + i + "].id")
ldprint ("data.cameras[" + i + "].name : " + obj.data.cameras[i].name)
eval ("Cameras" + i + "_name = obj.data.cameras[" + i + "].name")
ldprint ("data.cameras[" + i + "].recStatus : " + obj.data.cameras[i].recStatus)
eval ("Cameras" + i + "_recStatus = obj.data.cameras[" + i + "].recStatus")
ldprint ("data.cameras[" + i + "].enabled : " + obj.data.cameras[i].enabled)
eval ("Cameras" + i + "_enabled = obj.data.cameras[" + i + "].enabled")
}
}
}
success = obj.success
 
Equipement
Il faut créer un équipement générique (Equipements -> Universel -> Equipement (Générique)).

Créez les 5 commandes (ASCII) à l'aide du bouton encadré en rouge ci-dessus
Voici le contenu de ces commandes :
Activer / Désactiver : (SS_Camera_action = Enable / Disable)
----------------------
/entry.cgi?api=SYNO.SurveillanceStation.Camera&method={SS_Camera_action}&version=3&cameraIds={SS_Camera_id}&_sid={SS_sid}
 
Record Start/Stop : (SS_Camera_action = start / stop)
-------------------
/entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId={SS_Camera_id}&action={SS_Camera_action}&_sid={SS_sid}
 
Liste des caméras : (SS_Camera_action = List)
-------------------
/entry.cgi?api=SYNO.SurveillanceStation.Camera&method={SS_Camera_action}&version=4&_sid={SS_sid}
 
Update SID :
------------
/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account={SS_account}&passwd={SS_passwd}&session=SurveillanceStation&format=sid
 
Logout :
--------
/auth.cgi?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid={SS_sid}
 
Dans cet équipement, il faut également créer plusieurs variables
Liste des variables :
  • Idsession
  • success
  • Cameras#_id
  • Cameras#_name
  • Cameras#_recStatus
  • Cameras#_enabled
Où # est à remplacer par le numéro de la caméra, de 0 à (cfr JavaScript) maxcameras-1.
 
Utilisateur Surveillance Station
Créer un utilisateur dans Surveillance Station qui a les droits de Directeur pour toutes les caméras. 
Variables
Il faut créer les variables suivantes dans la LD
  1. SS_account - type = Chaîne - nom de l'utilisateur dans Surveillance Station (ici Utilisateur)
  2. SS_passwd - type Chaine - mot de passe de l'utilisateur dans Surveillance Station (ici … non, je ne vous le donnerai pas )
  3. SS_sid - type Chaîne - rempli automatiquement = token d'autorisation reçu du Synology
  4. SS_Camera_action - type Chaîne - contiendra le type d'action demandée à la caméra (Enable/ Disable / start / stop)
  5. SS_Camera_id - type Chaîne - contiendra l'ID (Synology) de la caméra pour laquelle l'action définie dans (SS_Camera_action) sera exécutée
  6. SS_Cameras#_id - type Numérique - remplie automatiquement lorsqu'on utilise la commande List. C'est ce numéro qu'il faut préciser dans SS_Camera_id.
  7. SS_Cameras#_name - type Chaîne - remplie automatiquement lorsqu'on utilise la commande List
  8. SS_Cameras#_enabled - type Booléen - remplie automatiquement par l'automate de mise à jour du statut des caméras
  9. SS_Cameras#_record - type Booléen - remplie automatiquement par l'automate de mise à jour du statut des caméras
Où # est à remplacer par le numéro de la caméra, de 0 à (cfr JavaScript) maxcameras-1.
Dans mon exemple, où J'ai 4 caméras, j'ai créé (5 + 4*4 = ) 21 variables avec # qui va de 0 à 3.

Automates
Différents automates nous permettrons de prendre les actions nécessaires et de mettre à jour les variables de statut.
  • SS_actions : gère les actions définies : à reproduire à l'identique
  • SS_actions_Send_Manual : exemple d'automate pour lancer une action particulière sur une caméra
  • SS_UpdateSid : génération d'un nouveau token par Synology : à reproduire à l'identique
  • SS_status : mise à jour les variables (SS_Cameras#_enabled & SS_Cameras#_record) avec le statut effectif des caméras.
  • SS_status_autorun : lance l'automate SS_status à fréquence régulière (par défaut 5 secondes), SANS passer par le planificateur de tâches.
N.B. : après chaque appel à l'équipement SS HTTP, faite un petit wait de 100 ms pour que la box ait le temps de traiter toutes les commandes / variables.
 
SS_actions
On teste si SS_Camera_action = Enable ou Disable. Les deux tests suivants c'est si on a mis des minuscules au lieu de majuscules à Enable et Disable.
Ensuite il lance la commande (Activer/Désactiver) au niveau de l'équipement SS HTTP.
 
Après le groupe des 3 premiers IF (pour la gestion des actions Enable/Disable), on gère les actions d'enregistrement (start/stop) suivant le même principe.
Enfin, on teste l'action List (ou list), qui récupérera les informations à propos des caméras existantes sur le Synology (leur id et leur nom).

Ensuite il lance la commande (List) au niveau de l'équipement SS HTTP.
Ensuite, mais ici ce n'est PAS optionnel, il met à jour les informations d'id et de nom des caméras.
 
SS_actions_Send_Manual
Cet automate illustre comment utiliser le précédent.
 
SS_UpdateSid
On fait un logout, pour tuer le token (sid) existant qui n'est plus valide, et est la cause du non succès de l'action menée.
Puis on demande un nouveau token (sid) au Synology :
 
SS_status
"courage", c'est le dernier gros automate qui nous  permettra de connaitre le statut de toutes vos caméras.
Il y a 6 tests par caméra.
Car en fonction de la valeur de l'équipement, je teste la valeur de la variable qui va être mise à jour. Elle ne sera mise à jour que si elle est modifiée.
Le calcul est vite fait : pour 4 caméras il y aurait 138240 variables mises à jour par jour, et dans 99% des cas pour rien. Le petit Wait de 1ms à la fin de chaque groupe de caméra, c'est pour que ce soit plus joli au niveau graphique.
On envoie d'abord l'action List à l'équipement SS HTTP
Puis on traite les informations pour mettre à jour les variables de statut de chaque caméra (8 variables ici)
J'illustre ici pour Cameras0, mais ce sera exactement la même chose pour toutes les autres.
Premier test pour savoir si la caméra est activée ou pas :
Ensuite, quelle que soit la réponse, on teste la valeur de la variable, avant d'éventuellement la mettre à jour.
Le second groupe de tests est pour savoir si la caméra enregistre ou pas :
En fonction de l'humeur du Synology, il retourne soit un champ vide, soit 0 si la caméra n'enregistre pas, d'où le ou dans le test.
Ensuite, quelle que soit la réponse, on teste la valeur de la variable, avant d'éventuellement la mettre à jour.
 
SS_status_autorun
Ce dernier automate, démarre comme un service Windows avec la box, et tourne en continu pour exécuter le précédent toutes les 5 secondes. Ainsi si vous modifiez quelque-chose à une caméra, même sans passer par la LD, dans les 5 secondes la LD en est informée.
Il ne fallait surtout pas planifier le précédent automate toutes les 5 secondes, la planification de la LD serait morte.
Par ailleurs, l'avantage de faire un automate séparé, est de pouvoir modifier plus facilement l'automate appelé.
 
Vous remarquerez que j'ai commencé tous mes objets  (Variables, automates, équipement sauf le connecteur) par SS. Ainsi c'est plus facile de les retrouver avec les filtres.


Pièces jointes
.pdf   Tuto - Surveillance Station.pdf (Taille : 1.86 Mo / Téléchargements : 137)
.zip   Cam.zip (Taille : 318.37 Ko / Téléchargements : 50)
Likes Received: 146 in 101 posts
Likes Given: 141
Répondre
#2
Encore un tuto top de chez top  Eek-1e6fb

Un travail de dingue  Doh-23e2
http://www.homesweetdom.lu
Boutique en ligne avec identification des produits testés compatibles Lifedomus
www.homesweetshop.eu
Likes Received: 155 in 108 posts
Likes Given: 220
Répondre
#3
Merci pour ce tuto....
De plus en plus de tutos bien fait....
Pour ma part, les tutos me permettent également de tracer ce que je fait et comment je le fait...
En cas de pannes majeures cela permet de ne pas repartir de zéro....
Likes Received: 8 in 5 posts
Likes Given: 17
Répondre
#4
Bravo jojo 

Quel boulot !  Amen-1fb6

Merci
Admin du Forum

Z-wave:  4 x RGBW - 8 x FGS211 - 2 x FGS221 - 1 x FGFS-101 - 17 x FGK101 - 4 x WallPlug - 1 x  FGSS-001 - 1 X FGBS.321 - 2 X FGD211 - 4 X FGSS-002 - 2 X FGMS-001
3 x SM103 - 1x HSM02 - 4 x AN157 - 4 x ST814 - 1 x ZG8101 , 2 x ZM1602 . 2 x Power Node 6
2 x Minimote - 1 X Smart Energy DSC06106 - 1 x Keyfob - 2 x FGPB.001 - 1x Octan remote

Divers : 1 x EcoDevices - 1 x IPX800 - 1 x Sirène Elkron - 3 x Foscam - 1 x Zmodo - 1 x Tablette Surface- 1 x Ipad2 - 1 x Qnap 453a- 1 x SMS Gateway - Sonos: 1xPlaybar , 1xSub, 2xPlay3 , 4xPlay1 , 2 x Thermostat NetAtmo + Station, Nuc, Karotz, Philips Hue , Roomba 620. Doorbird, Jeedom en esclave

Répondre
#5
Cet homme est un phenomène !!  @jojo
Avec le PDF en images, que dire, tu merites le titre de Dieu du forum :-)

Du gros gros boulot, j'ai presque compris alors que je n'ai pas de LD.
Ma question de noob, n'etait-il pas de ne faire qu'1 seul automate ? cela aurait ete encore plus complexe que la ?

C'est du chinois tout ca pour moi
Répondre
#6
@Pepite,
dans ton genre tu es un phénom§ne également : comment tu fais pour suivre tout l'actualité, aider comme tu le ais, construire ta maison, travailler, ... ? Je suis jaloux.

On pourrait en effet réduire à deux automates :
  • un pour la mise à jour des status
  • un pour les actions et la génération des sid.
Mais alors ils seraient encore plus complexes à maintenir, et il y aurait des démultiplications d'actions (toutes celles de l'automate SS_UpdateSid, se retrouveraient au min 3 fois à l'identique ...
Likes Received: 146 in 101 posts
Likes Given: 141
Répondre
#7
propositions d'améliorations, que j'ai mise en place, mais que vous pouvez faire sans problème :

1) au lieu de mettre les notif dans l'automate SS_actions,  je les mets dans l'automate SS_status, comme je fais de toute façon un test de changement de la valeur de l'état. Donc si changement notification, avec en prime récupération du nom de la caméra dans la notification.

2) pour l'automate SS_actions, en début d'automate, arrêter puis désactiver l'automate SS_status. Et en fin, le réactiver. Et ce afin d'éviter que les ordres rentrent en conflict
Répondre
#8
Merci et bravo pour ce tuto !  Eek-1e6fb

Pas encore tout lu en détail, mais dès que j'ai un peu de temps, je teste !
Likes Received: 1 in 1 posts
Likes Given: 2
Répondre
#9
Bonjour, 
Tout d'abord merci pour ce super tuto Eek-1e6fb.
J'ai juste une question bête comment récuperer le flux vidéo de la camera pour le visualiser via LD DS ou l'appli android LD.


Merci par avance pour vos réponses.
Répondre
#10
Je n'en ai encore aucune idée, car la LD ne traite que le mjpeg.
Mais si un jour j'ai du temps, je regarderai dans l'API de SS, si on peut ainsi récupérer le flux vidéo de SS.
Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Tuto Module Universel pour surveillance station jojo 13 2,553 05-22-2018, 08:28 PM
Dernier message: Benjamin04



Utilisateur(s) parcourant ce sujet : 1 visiteur(s)