Message populaire Lazer Posté(e) le 22 mars 2014 Message populaire Signaler Posté(e) le 22 mars 2014 (modifié) Note : le QuickApp pour HC3 se trouve ici : https://www.domotique-fibaro.fr/topic/14594-quick-app-synology-surveillance-station/ Présentation Voici un Module Virtuel permettant de activer/désactiver les caméras, et démarrer/arrêter l'enregistrement des caméras gérées par l'outil Surveillance Station qu'on trouve sur les NAS Synology. Ce module permet également de piloter le positionnement PTZ des caméras motorisées. Ce module virtuel dispose de 5 boutons : Start : démarrer l'enregistrement Stop : arrêter l'enregistrement Enable : activer la/les caméra(s) Disable : désactiver la/les caméra(s) List : permet de récupérer l'ID des caméras connues par Surveillance Station. Pour utiliser ce bouton, il faut ouvrir la fenêtre de Debug car c'est pour le moment la seule façon que j'ai trouvé d'afficher les informations à l'écran. Ainsi que d'un nombre de boutons paramétrables : Un bouton pour chaque position mémorisée De plus, la main loop permet de surveiller le statut des caméras et d'adapter l’icône du module virtuel en conséquence. Pré-requis : Au moins une caméra doit être gérée par Surveillance Station : Il est conseillé de paramétrer la caméra en détection de mouvement permanente : Si la caméra en est capable, des positions prédéfinies doivent être mémorisées pour les caméras à piloter : Création d'un utilisateur dédié : Bien que non-obligatoire, il est conseillé pour des raisons de sécurité de créer un utilisateur dédié dans DSM. Ainsi, le mot de passe du compte admin n'est pas exposé dans le code source du module virtuel. Note : la version 4.3 est utilisée pour les screenshots suivants, mais la méthode est strictement identique pour les versions 5.x de DSM. Ouvrir le panneau de configuration : Ouvrir le panneau des utilisateurs : Cliquer sur le bouton "Créer", et entrer les informations utiles. Note : il est judicieux de cocher la case "Ne pas autoriser l'utilisateur à changer le mot de passe du compte" : Cocher le groupe "users" : Cocher les cases "Pas d'accès" pour l'ensemble des dossiers partagés : Ne rien cocher : Décocher les cases de tous les privilèges, et ne cocher que la case "Surveillance Station" : Ne rien modifier : Vérifier que tout est bon, et cliquer sur le bouton "Appliquer" : De retour dans Surveillance Station, ouvrir le panneau Utilisateur, puis sélectionner l'utilisateur Fibaro préalablement créé, et cliquer sur le bouton "Modifier" : Dans la liste déroulante "Profil de privilège", sélectionner "Gestionnaire tout objet", puis cliquer sur le bouton "OK" : L'utilisateur dispose maintenant des droits Directeur : Import du module virtuel : Dans l'interface du Home Center 2, importer le fichier Surveillance_Station.vfib : Modifier les icônes du module et de tous les boutons avec les images suivantes : Module virtuel : surveillancestation_128.png Start : surveillancestation_rec_128.png Stop : surveillancestation_stop_128.png Enable : surveillancestation_enable_128.png Disable : surveillancestation_disable_128.png List : surveillancestation_list_128.png Move : surveillancestation_ptz_128.png Configuration : Modifier les propriétés du module virtuel, et entrer les informations correctes pour joindre le Synology : Adresse IP et Port TCP : Modifier les propriétés avancées du module virtuel, et modifier les premières lignes de chacun des boutons avec vos paramètres : -- User configurable variables local login = "user" -- Utilisateur Synology local password = "password" -- Mot de passe Synology. Pour les boutons PTZ, il faut spécifier le preset correspondant à chaque bouton (la caméra positionnée sera obligatoirement la première caméra listée dans la main loop, voir plus bas) : local preset = 1 -- ID de la position PTZ Pour récupérer l'ID des caméras, et les ID des positions PTZ, il faut utiliser le mode "Debug" sur le bouton "List". Dans l'exemple ci-dessous, il y a une seule caméra avec l'ID n°2, et 4 positions PTZ avec les ID n°1, 2, 3, 4 : Remarque : lors de l'importation du module virtuel, le Virtual Device possède 4 boutons PTZ, mais ceci est à modifier en fonction de votre propre environnement. Il faut 1 bouton par position et par caméra. Main Loop : Ce module virtuel dispose d'une Main Loop qui surveille le statut des caméras avec un intervalle de rafraichissement de 10 secondes et met à jour : l’icône du module virtuel un label du module virtuel une variable globale Pour la configuration de cette main loop, il faut modifier les paramètres suivants : login : Utilisateur Synology password : Mot de passe Synology cameras : {0} => détection automatique des caméras. Par conséquent, les boutons d'action Enable/Disable/Start/Stop agiront sur toutes les caméras simultanément. {1} ou {2} ou {1, 2, 3} ... => ID de la (ou des) caméra(s) à gérer. On peut envisager de ne piloter qu'une seule caméra, et de multiplier les modules virtuels, afin que chaque module virtuel ne soit responsable que d'une seule caméra (voir aussi VG_status ci-dessous) VG_status : SurvStation_Status => variable globale par défaut créée automatiquement, qui contient le statut de la (ou des) caméra(s), pouvant être exploité dans des scripts LUA. Valeur personnalisée => nécessaire si plusieurs instances du VD afin de piloter différentes caméras (voir aussi cameras ci-dessus). Celle-ci sera également automatiquement créée au démarrage du VD. refresh : intervalle de rafraichissement du statut, par défaut à 10 secondes. standbyIcon, recordIcon, disableIcon : ID des icônes Standby, Recording, et Disabled -- User configurable variables local login = "user" local password = "password" local cameras = {0} -- {1,2,4,5,6} -- Liste de une ou plusieurs caméras, pour les boutons Start, Stop, Enable, Disable local VG_status = "SurvStation_Status" local refresh = 10 -- seconds local standbyIcon = 1010 local recordIcon = 1011 local disableIcon = 1029 Pour récupérer les ID des 3 icônes, le plus simple est d'utiliser le Toolkit HC2 de Krikroff, on sélectionne l'onglet Virtual Devices, puis Get API Raw Data, puis là on cherche la valeur du paramètre buttonIcon des boutons Start, Stop, et Disable : Utilisation : - Un clic sur les boutons "Enable" ou "Disable", a pour effet d'activer/désactiver la caméra dans Surveillance Station, donc d'activer ou désactiver la détection de mouvement par le Syno. - Un clic sur le bouton "Start" a pour effet de forcer le démarrage de l'enregistrement continu des caméras sur le disque dur du NAS. - Un clic sur le bouton "Stop" a pour effet d'arrêter l'enregistrement continu des caméras, qui est équivalent à repasser en détection de mouvement - Un clic sur les boutons de position PTZ permet de déplacer la caméra. - La Main Loop surveille l'enregistrement des caméras, et ajuste l’icône du module virtuel en conséquence, ainsi qu'un petit message en vert en bas du module si un enregistrement est en cours. Ensuite, vous pouvez appeler ces boutons depuis vos scènes, par exemple à heure fixe programmée, ou en fonction des scénarios tels que la mise en fonctionnement de l'alarme, ou la détection de mouvement. Changelog : v1.0 : Initial release v1.01 : Minor bug fixes v2.0 : Main Loop and PTZ control v4.0 : Improved main loop, Add Enable/Disable buttons, Add cameras auto-detection v4.3 : Improved SID connection, added Status global variable v4.4 : Enhanced management of single or multiple camera Téléchargement : Surveillance_Station_v4.4.vfib Modifié le 23 septembre 2020 par Lazer 13
Yohan Posté(e) le 22 mars 2014 Signaler Posté(e) le 22 mars 2014 Très bon boulot encore une fois Lazer. Merci pour ton partage.
Moicphil Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Allez, hop je le met en place sur mon syno...merci !
fab971 Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Merci beaucoup. Je le mets en place dès que possible.
CaptainIgloo Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Nickel ! On peut vraiment jouer avec des scénarios très pertinent.
lionel Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Merci Lazer Grace a toi ,je vais être obliger de me racheter un Sygnology C est madame qui va être contente
CaptainIgloo Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Par contre l'import impossible pour moi ! Et pour vous ?
CaptainIgloo Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Le fichier vfib est corrompu par un 5 au début du fichier. Une fois supprimé cela fonctionne.
Lazer Posté(e) le 23 mars 2014 Auteur Signaler Posté(e) le 23 mars 2014 J'ai mis à jour le fichier joint au premier post. Je ne sais pas trop d'où sort ce "5", mais ça devrait être corrigé. Si l'import ne fonctionne pas, voici le code source du module à copier/coller : Pour les 2 boutons Start et Stop, c'est le même code, il faut simplement changer la variable action en début de script : -------------------------------------------------- -- Synology Surveillance Station -- Start/Stop recording -- Lazer -- Mars 2014 -------------------------------------------------- -- User configurable variables local Synology = Net.FHttp("192.168.1.1", 5000) local login = "user" local password = "password" local cameras = {1, 2, 3} local action = "start" -- "stop" -- System variables local API_AUTH_ERROR_CODE = { [100] = "Unknown error.", [101] = "The account parameter is not specified.", [400] = "Invalid password.", [401] = "Guest or disabled account.", [402] = "Permission denied.", [403] = "One time password not specified.", [404] = "One time password authenticate failed." } local API_RECORD_ERROR_CODE = { [400] = "Execution failed.", [401] = "Parameter invalid.", [402] = "Camera disabled." } -- Discover available APIs and corresponding information payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth,SYNO.SurveillanceStation.ExternalRecording" response, status, errorCode = Synology:GET(payload) if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.data["SYNO.API.Auth"].maxVersion >= 2 and jsonTable.data["SYNO.SurveillanceStation.ExternalRecording"].maxVersion >= 2 then fibaro:debug("Synology API version OK") pathAuth = jsonTable.data["SYNO.API.Auth"].path pathRecord = jsonTable.data["SYNO.SurveillanceStation.ExternalRecording"].path fibaro:debug("Synology API Auth path = "..pathAuth) fibaro:debug("Synology API Surveillance Station Record path = "..pathRecord) -- Create new login session payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..login.."&passwd="..password.."&session=SurveillanceStation&format=sid" response, status, errorCode = Synology:GET(payload) if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.success == true then SID = jsonTable.data.sid fibaro:debug("Synology API Auth SID = "..SID) for i = 1, #cameras do -- Start or stop external recording of a camera payload = "/webapi/"..pathRecord.."?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=2&cameraId="..cameras[i].."&action="..action.."&_sid="..SID response, status, errorCode = Synology:GET(payload) jsonTable = json.decode(response); if jsonTable.success == true then fibaro:log("OK") fibaro:debug('<span style="color:green;">Synology Surveillance Station '..action..' recording for camera "'..tostring(cameras[i])..'" OK</span>') else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Synology Surveillance Station '..action..' recording for camera "'..tostring(cameras[i])..'" FAILED : '..API_RECORD_ERROR_CODE[tonumber(jsonTable.error.code)]..'</span>') end end -- Destroy current login session payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid="..SID response, status, errorCode = Synology:GET(payload) else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Error : '..API_AUTH_ERROR_CODE[tonumber(jsonTable.error.code)]..'</span>') end else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Error : API Authentication failure</span>') end else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Error : Synology API version is too old : <b>DSM 4.0-2251</b> and <b>Surveillance Station 6.1</b> are required</span>') end else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Error : Can not connect to Synology server</span>') end . Pour le bouton List : -------------------------------------------------- -- Synology Surveillance Station -- List cameras -- Lazer -- Mars 2014 -------------------------------------------------- -- User configurable variables local Synology = Net.FHttp("192.168.1.1", 5000) local login = "user" local password = "password" -- System variables local API_AUTH_ERROR_CODE = { [100] = "Unknown error.", [101] = "The account parameter is not specified.", [400] = "Invalid password.", [401] = "Guest or disabled account.", [402] = "Permission denied.", [403] = "One time password not specified.", [404] = "One time password authenticate failed." } -- Discover available APIs and corresponding information payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth,SYNO.SurveillanceStation.Camera" response, status, errorCode = Synology:GET(payload) if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.data["SYNO.API.Auth"].maxVersion >= 2 and jsonTable.data["SYNO.SurveillanceStation.Camera"].maxVersion >= 2 then fibaro:debug("Synology API version OK") pathAuth = jsonTable.data["SYNO.API.Auth"].path pathCamera = jsonTable.data["SYNO.SurveillanceStation.Camera"].path fibaro:debug("Synology API Auth path = "..pathAuth) fibaro:debug("Synology API Surveillance Station Camera path = "..pathCamera) -- Create new login session payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..login.."&passwd="..password.."&session=SurveillanceStation&format=sid" response, status, errorCode = Synology:GET(payload) if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.success == true then SID = jsonTable.data.sid fibaro:debug("Synology API Auth SID = "..SID) -- Get the list of all cameras payload = "/webapi/"..pathCamera.."?api=SYNO.SurveillanceStation.Camera&method=List&version=1&_sid="..SID --fibaro:debug(payload) response, status, errorCode = Synology:GET(payload) --fibaro:debug(response) --fibaro:debug(status) --fibaro:debug(errorCode) jsonTable = json.decode(response); if jsonTable.success == true then fibaro:debug('Synology Surveillance Station number of cameras = '..tostring(jsonTable.data.total)) for i = 1, #jsonTable.data.cameras do fibaro:debug('<span style="color:green;">Found camera <b>'..jsonTable.data.cameras[i].name..'</b> ID=<b>'..jsonTable.data.cameras[i].id..'</b> address='..jsonTable.data.cameras[i].host..'</span>') end fibaro:log("OK") else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Synology Surveillance Station list cameras FAILED</span>') end -- Destroy current login session payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid="..SID response, status, errorCode = Synology:GET(payload) else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Error : '..API_AUTH_ERROR_CODE[tonumber(jsonTable.error.code)]..'</span>') end else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Error : API Authentication failure</span>') end else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Error : Synology API version is too old : <b>DSM 4.0-2251</b> and <b>Surveillance Station 6.1</b> are required</span>') end else fibaro:log("Erreur") fibaro:debug('<span style="color:red;">Error : Can not connect to Synology server</span>') end
Fredric Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 je viens juste de déballer mon cadeau d'anniversaire et devinez quoi!! un Synology DS213j, ça tombe bien!! bravo et merci Lazer
Narsil Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Pile poil ce qu'il me faut ça ! Bon, j'ai une grosse question de noob qui tue (je suis pas encore équipé, désolé) : ça tourne sur un HCL ça ? Diego
Shad Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Comme je t'ai déjàdit non. Aucun code lua n'est possible dans la HClite
Lazer Posté(e) le 23 mars 2014 Auteur Signaler Posté(e) le 23 mars 2014 Narsil, Non, je ne pense pas que ça tournera sur HCL, car il me semble bien qu'il n'est pas possible d'importer un Virtual Device comportant du code LUA. Peut-être qu'en v4 avec les plugins ça sera possible, mais pour le moment ce ne sont que des suppositions. Avec la HC Lite, tu peux seulement appeler des URL simples, avec la commande HTTP GET. Donc il faudrait que les scripts de ce module virtuel soient hébergés sur un autre serveur. Mais comme tu as peu de chances de pouvoir faire tourner du LUA sur une autre plateforme, il faudrait transcrire le code en PHP par exemple.... bref, ce n'est que déporter la complexité sur un autre serveur. EDIT : grillé par Shad !
i-magin Posté(e) le 23 mars 2014 Signaler Posté(e) le 23 mars 2014 Merci @Lazer... toujours des Tutos impeccables (clairs, détaillés, illustrés !)
q.philippe Posté(e) le 24 mars 2014 Signaler Posté(e) le 24 mars 2014 Pour la configuration HC2 , j'ai fais deux groupes donc deux modules, un Module Intérieur (5 cams record) et un Module Extérieur (4cams record). On peut créer aussi un module par cam ( mais ça fait beaucoup de bouton a appuyer en même temps). merci encore et toujours
olivipaq Posté(e) le 25 mars 2014 Signaler Posté(e) le 25 mars 2014 Merci Lazer, super boulot, et ça tombe pil poile car je viens d'installer deux caméras mobotix chez moi 1
Arnaud78 Posté(e) le 31 mars 2014 Signaler Posté(e) le 31 mars 2014 @Lazer: Est-ce qu'il serait envisageable d'utiliser ce module virtuel en faisant quelques modifications, avec un NAS Qnap et la surveillance station de Qnap ?! Bonne soirée.
Lazer Posté(e) le 31 mars 2014 Auteur Signaler Posté(e) le 31 mars 2014 Oui tout est possible Mais comme je ne connais pas du tout l'API Qnap, et que je n'ai pas de Qnap pour tester, je te laisse t'y coller Tu peux reprendre les scripts, et créer un nouveau sujet dédié.
Fredric Posté(e) le 2 avril 2014 Signaler Posté(e) le 2 avril 2014 j'ai enfin eu le temps de mettre ça en place Super Lazer, ça marche nickel. j'ai du copier le code pour le "STOP" car cela ne fonctionné pas direct avec le VD, mais une fois copier/coller et mis mes paramètres , super
Messages recommandés