[V2] Gestion cameras Synology Surveillance Station via un dummy dans Domoticz

Pas mal inspiré ces temps, j’ai ré-écris le script pour la gestion des caméras dans Surveillance Station via Domoticz.

Commençons par rendre à César ce qu’il lui appartient. Les deux sources principales pour la réalisation de ce script :

La première partie concernant DSM n’a pas changé :

Configuration côté DSM

Il faut tout d’abord créer et configurer le compte qui nous servira à contrôler les caméras. Rien de bien compliqué, juste refuser les accès à tout sauf à Surveillance Station.

NB : Il est possible d’ajouter le compte directement depuis Surveillance station

syno-cam001 syno-cam002

Puis, dans Surveillance Station, lui donner le privilège de Gestionnaire (directeur)

syno-cam003b
syno-cam003a
syno-cam003

C’est tout pour le côté DSM 🙂

Configuration côté Domoticz

Le script a été ré-écrit, il se retrouve condensé en un seul fichier 😈

#!/bin/bash

# PARAMS
# 1 : enable | disable | check
# 2 : ID(s) of camera(s), if more than one (Only for enable and disable actions) : coma separed (eg : 1,4)
# 3 : IDx of domoticz dummy switch

# No idx given = stop script
[[ -z "$1" ]] && { echo "Parameter 1 is empty" ; exit 1; }
[[ -z "$2" ]] && { echo "Parameter 2 is empty" ; exit 1; }
[[ -z "$3" ]] && { echo "Parameter 3 is empty" ; exit 1; }

# User defined vars
syno_user="USER"
syno_pwd="PWD"
syno_url="IP_SYNO:PORT_SYNO" # eg 192.168.1.100:5000
domoticz_url="IP_DOMOTICZ:PORT_DOMOTICZ" # eg 127.0.0.1:8080
vAuth=2
vCam=8
vList=1


# Get Paths (recommended by Synology for further update)
curlResult=$(curl -s "http://${syno_url}/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth,SYNO.SurveillanceStation.Camera")
authPath=$(echo "$curlResult" | jq -r '.["data"]["SYNO.API.Auth"]["path"]')
surveillancePath=$(echo "$curlResult" | jq -r '.["data"]["SYNO.SurveillanceStation.Camera"]["path"]')

# Do login
curlResult=$(curl -s "http://${syno_url}/webapi/${authPath}?api=SYNO.API.Auth&method=Login&version=${vAuth}&account=${syno_user}&passwd=${syno_pwd}&session=SurveillanceStation&format=sid")
if [[ $(echo "$curlResult" | jq -r '.["success"]') == 'false' ]]; then 
	echo "Error on login"
	exit 0
fi
# Storage of SID for further actions
SID=$(echo "$curlResult" | jq -r '.["data"]["sid"]')

# Do actions
# Enable action
if [[ $1 == 'enable' ]]; then
	# Enable trough DSM API
	curlResult=$(curl -s "http://${syno_url}/webapi/${surveillancePath}?api=SYNO.SurveillanceStation.Camera&method=Enable&version=${vCam}&cameraIds=${2}&_sid=${SID}")
	if [[ $(echo "$curlResult" | jq -r '.["success"]') == 'false' ]]; then 
		curl -s "http://${syno_url}/webapi/${authPath}?api=SYNO.API.Auth&method=Logout&version=${vAuth}&_sid=${SID}" > /dev/null 2>&1
		echo "Error on enabling"
		exit 0
	fi

# Disable action
elif [[ $1 == 'disable' ]]; then
	# Enable trough DSM API
	curlResult=$(curl -s "http://${syno_url}/webapi/${surveillancePath}?api=SYNO.SurveillanceStation.Camera&method=Disable&version=${vCam}&cameraIds=${2}&_sid=${SID}")
	if [[ $(echo "$curlResult" | jq -r '.["success"]') == 'false' ]]; then 
		curl -s "http://${syno_url}/webapi/${authPath}?api=SYNO.API.Auth&method=Logout&version=${vAuth}&_sid=${SID}" > /dev/null 2>&1
		echo "Error on disabling"
		exit 0
	fi

# Check action
elif [[ $1 == 'check' ]]; then
	# Get status of the camera
	curlResult=$(curl -s "http://${syno_url}/webapi/${surveillancePath}?api=SYNO.SurveillanceStation.Camera&method=List&version=${vList}&cameraIds=${2}&_sid=${SID}")
	# Get status of the dummy switch
	curlResultDomo=$(curl -s "http://${domoticz_url}/json.htm?type=devices&rid=${3}")
	# Cam is Off and dummy is On
	if [ $(echo "$curlResult" | jq -r '.data.cameras[].enabled') == 'false' ] && [ $(echo "$curlResultDomo" | jq -r '.result[].Status') == 'On' ]; then 
		curl -s "http://${domoticz_url}/json.htm?type=command&param=udevice&idx=${3}&nvalue=0&svalue=" > /dev/null 2>&1
	# Cam is On and dummy is Off
	elif [ $(echo "$curlResult" | jq -r '.data.cameras[].enabled') == 'true' ] && [ $(echo "$curlResultDomo" | jq -r '.result[].Status') == 'Off' ]; then 
		curl -s "http://${domoticz_url}/json.htm?type=command&param=udevice&idx=${3}&nvalue=1&svalue=" > /dev/null 2>&1
	fi
fi

# Do logoff
curl -s "http://${syno_url}/webapi/${authPath}?api=SYNO.API.Auth&method=Logout&version=${vAuth}&_sid=${SID}" > /dev/null 2>&1

 

Il est très simple de l’utiliser, les lignes 14 à 17 sont à modifier en fonction de votre installation.

Ce fichier est à copier dans votre dossier /home/pi/domoticz/scripts puis il faut le rendre exécutable, commande sudo chmod +x script_synoCamerasMngt.sh

Avant le test, il faut installer le paquet jq qui permet de parser du json sudo apt-get install jq

Vous pouvez déjà tester si cela fonctionne en exécutant le script depuis le shell via ./home/pi/domoticz/scripts/script_synoCamerasMngt.sh enable 1 20. En supposant que votre camera est l’id 1 et le dummy dans domoticz le 20.

Gestion dummy domoticz

Une fois ce script fonctionnel, il suffit alors de modifier le dummy dans domoticz pour lui attribuer une action lors du on et une lors du off

Les deux lignes sont (en reprenant les IDs d’exemples ci-dessus) :

  • script:///home/pi/domoticz/scripts/script_synoCamerasMngt.sh enable 1 20
  • script:///home/pi/domoticz/scripts/script_synoCamerasMngt.sh disable 1 20

To Do

  • Vérifications: Pour l’instant, la partie “check” est écrite et fonctionnelle. Je n’ai pas encore pris le temps de regarder comment l’intégrer via une règle automatique dans domoticz. Le problème majeur se situe sur le fait que la mise à jour du statut du dummy exécute les triggers, comportement que je souhaite éviter.
  • Multiples caméras : L’activation et désactivation devraient fonctionner (je n’ai plus de 2ème caméra pour l’instant pour pouvoir tester). Il faut aussi ajouter la gestion du check pour >1 caméra

24 réflexions sur « [V2] Gestion cameras Synology Surveillance Station via un dummy dans Domoticz »

  1. Ping : Activation et désactivation cameras Surveillance Station via un dummy | Stéphane Rochat

  2. Bonjour
    J’ai suivi le tuto à la lettre.
    J’ai une erreur dans les logs domoticz 32256 et une erreur que je le lance en shell : comman not found.
    Je suppose qu’il s’agit d’un problème de droit, voici les droits du fichier
    -rwx–x–x 1 root root 3799 May 13 12:14 script_synocam.sh
    J’ai aussi tenté en mettant domoticz propriétaire du fichier :
    -rwx–x–x 1 domoticz root 3799 May 13 12:14 script_synocam.sh

    Avez vous une idée ?

    Merci d’avance,
    Fabien

    • Bonjour,
      Merci de votre commentaire 🙂

      1. Avez-vous curl d’installé ?
      sudo apt-get install curl

      Que se passe-t’il si vous lancez la commande :
      curl http://www.google.com
      ?

    • Quelle est l’erreur exacte ? Elle est dans le log dans domoticz ?

  3. Voici ce que j’ai dans les logs domoticz
    2017-05-14 10:36:31.425 (Karotz) Light/Switch (Kallum)
    2017-05-14 10:36:31.646 Executing script: /volume1/@appstore/domoticz/var/scripts/script_synocam.sh
    2017-05-14 10:36:31.707 Error: Error executing script command (/volume1/@appstore/domoticz/var/scripts/script_synocam.sh). returned: 32256

    • Sur synology jamais testé, que donne l’exécution du script en direct dans un terminal ?

    • N’ayant pas testé sur Synology, je présume que le problème vient de là

  4. Bonjour,
    Merci beaucoup pour ce tuto qui m’a bien servi.
    Pour ceux qui utilisent surveillance station 8 il y a quelques modifs a faire.
    => Au niveau des variables il faut vCam=9 et non plus 8
    => dans le do action, dans l’appel a l’API, il faut remplacer les “cameraIds” par “idList”.
    Ensuite tout fonctionne bien.
    A+

    • Merci pour ce feedback !! Je suis avec SS 8 et cela fonctionne sans problème. étrange

  5. Bonjour Stéphane,
    J’utilise domoticz depuis un moment et côté synology je n’ai activé surveillance station depuis peu. J’étais donc à la recherche d’un script pour faire le lien entre les deux et je suis tombé chez toi, merci tu m’as inspiré !
    D’abord : je ne souhaitais pas désactiver les caméras mais activement le mode maison de surveillance station. Ce mode n’existait pas encore à l’époque de ton premier script et permet de changer de configuration (quand je suis à la maison ça ne fait que enregistrer, quand je suis à l’extérieur ça me notifie). C’est donc plus simple car on gère qu’un seul mode et pas un ensemble de caméras. Aussi les caméras sont tout le temps actives.
    Ensuite : j’ai trouvé les réponses à tes questions pour faire évoluer ton script initial à savoir : désactiver plusieurs caméras d’un coup et ne plus avoir besoin de la méthode Check pour que domoticz soit à jour.

    Si tu souhaites avoir les deux scripts, n’hésite pas à m’envoyer un mail et je t’envoie ça. Un github peut être ?
    Merci encore

    • Salut 🙂
      Merci de ta réponse. Avec plaisir pour le partage de script.
      Ayant mon domoticz qui tourne, je n’ai jamais vraiment regardé les nouvelles options 🙂
      Ce mode Home semble effectivement intéressant !
      Je t’envoie un mail pour la suite 🙂

      Merci à toi pour le feedback !
      Stéphane

    • Bonjour Yep,
      Tout d’abord, merci Stéphane pour ce beau tuto😀.
      Je suis intéressé par ton script pour activer/désactiver le homeMode.
      Pourrais tu le partager, stp.
      Bonne journée
      Louis

  6. Bonjour Stéphane,

    Très content de trouver ton script et avec la dernière version de Domoticz sur NAS Synology le package jq semblant intégré. J’arrive à activer et désactiver mes caméras (sans les modifications de Vincent). Mais j’ai un problème avec le check. En effet l’API de Surveillance Station me retourne l’état des 3 caméras, comme si l’argument camerasIds (j’ai meme essayé avec idList) était ignoré. Je suis avec DSM 6.1.4-15217 Update 2 et Surveillance Station 8.1.3-5473.
    Est-ce que l’API aurait été modifiée ?

    • Salut Hugues,

      Visiblement il y a eu des changements dans l’api. Voir les commentaires plus vieux.
      Je regarderai ça de plus prêt prochainement, pour l’instant je suis un peu limité dans le temps à disposition…
      Merci pour ton feedback !

      Stéphane

  7. Bonjour,
    Je suis utilisateur de ton script depuis quelques temps j’en étais super content mais j’ai mis à jour SS en version 8.1 et la c’est le drame plus rien ne marche, j’ai regardé la V2.7 du guide le l’API mais je ne trouve rien de nouveau qui pourrait empêcher le script de marcher.
    Est ce que quelqu’un a réussit a le refaire marcher ?

    • Hello, j’ai toujours pas beaucoup de temps pour regarder ça, j’essaie de regarder les nouveautés dans le mois d’avril.

      Merci de ton feedback !

  8. A force de chercher j’ai réussi à mixer d’une part la détection Bluetooth ( plus précise que le wifi ) avec la gestion de HomeMode via le script de ce site ==> https://www.loutor.org/2018/02/08/home-mode-avec-surveillance-station/

    Il faut doubler le script un ON, un OFF en obligeant ON à être True et OFF à être False dans la détection Nmap ( on peut surement supprimer cette partie mais je suis assez pressé du coup je vais au plus rapide…

    Dans HomeMode il faudra ensuite gérer les notifs et les cams comme bon vous semble.

    Voila ça peut servir a quelqu’un en attendant que l’on trouve mieux.

  9. Bonjour et merci pour cet exemple qui m’a mis sur la voie ! Je cherchais en effet un moyen d’activer l’enregistrement sur SurveillanceStation lorsque j’arme mon alarme, gérée par Domoticz.
    J’étais un peu ennuyé par le fait que ton script soit totalement en shell car mon Domoticz est hébergé sur mon NAS Synology et je ne suis pas aussi libre que sur un serveur Linux, notamment pour l’installation de paquets (je pense à jq).

    Du coup je me suis lancé dans la création d’un plugin Python et il est désormais fonctionnel ! Il est disponible ici : https://github.com/lolautruche/SurveillanceStationDomoticz . Il suffit de suivre le README pour l’installation. Je vais prendre le temps de créer une page sur le wiki de domoticz.com

    N’hésitez pas à tester et à me remonter d’éventuels problèmes sur la page Github !

    Merci encore pour le point de départ !

    • J’ai installé ton plugin python mais j’ai des erreurs dans le logs Domiticz il arrive pas a se connecter au API de mon Synology

      Voici un exemple des logs :

      2019-06-09 10:37:22.228 (Camera Syno) Processing ‘ReadEvent’ message
      2019-06-09 10:37:22.228 (Camera Syno) Received 5 bytes of data
      2019-06-09 10:37:22.228 (Camera Syno) 30 0d 0a 0d 0a .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 0….
      2019-06-09 10:37:22.229 (Camera Syno) Pushing ‘onMessageCallback’ on to queue
      2019-06-09 10:37:22.229 (Camera Syno) Processing ‘onMessageCallback’ message
      2019-06-09 10:37:22.229 (Camera Syno) Calling message handler ‘onMessage’.
      2019-06-09 10:37:22.229 (Camera Syno) {“error”:{“code”:400},”success”:false}
      2019-06-09 10:37:22.229
      2019-06-09 10:37:22.229 (Camera Syno) An error was raised by SurveillanceStation API!
      2019-06-09 10:37:31.610 (Camera Syno) Pushing ‘onHeartbeatCallback’ on to queue
      2019-06-09 10:37:31.641 (Camera Syno) Processing ‘onHeartbeatCallback’ message
      2019-06-09 10:37:31.641 (Camera Syno) Calling message handler ‘onHeartbeat’.
      2019-06-09 10:37:41.612 (Camera Syno) Pushing ‘onHeartbeatCallback’ on to queue
      2019-06-09 10:37:41.655 (Camera Syno) Processing ‘onHeartbeatCallback’ message
      2019-06-09 10:37:41.655 (Camera Syno) Calling message handler ‘onHeartbeat’.

  10. Salut Jérôme Vieilledent,

    J’ai installé ton plugin python mais j’ai des erreurs dans le logs Domiticz il arrive pas a se connecter au API de mon Synology

    Voici un exemple des logs :

    2019-06-09 10:37:22.228 (Camera Syno) Processing ‘ReadEvent’ message
    2019-06-09 10:37:22.228 (Camera Syno) Received 5 bytes of data
    2019-06-09 10:37:22.228 (Camera Syno) 30 0d 0a 0d 0a .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 0….
    2019-06-09 10:37:22.229 (Camera Syno) Pushing ‘onMessageCallback’ on to queue
    2019-06-09 10:37:22.229 (Camera Syno) Processing ‘onMessageCallback’ message
    2019-06-09 10:37:22.229 (Camera Syno) Calling message handler ‘onMessage’.
    2019-06-09 10:37:22.229 (Camera Syno) {“error”:{“code”:400},”success”:false}
    2019-06-09 10:37:22.229
    2019-06-09 10:37:22.229 (Camera Syno) An error was raised by SurveillanceStation API!
    2019-06-09 10:37:31.610 (Camera Syno) Pushing ‘onHeartbeatCallback’ on to queue
    2019-06-09 10:37:31.641 (Camera Syno) Processing ‘onHeartbeatCallback’ message
    2019-06-09 10:37:31.641 (Camera Syno) Calling message handler ‘onHeartbeat’.
    2019-06-09 10:37:41.612 (Camera Syno) Pushing ‘onHeartbeatCallback’ on to queue
    2019-06-09 10:37:41.655 (Camera Syno) Processing ‘onHeartbeatCallback’ message
    2019-06-09 10:37:41.655 (Camera Syno) Calling message handler ‘onHeartbeat’.

    • salut Aurélien Godin,

      as tu résolu ton problème?
      j’avais le même soucis que toi ( même code erreur) le problème venait de la double authentification sur tous mes comptes. j’ai supprimé la double authentification sur le compte créé pour l’accès à surveillance station sur le syno et tout fonctionne. 🙂

      je t’avoue que j’ai bien galéré à comprendre d’où venait ce fichu problème…

  11. Salut Olivier,

    Merci pour ton retour 😉 malheureusement je n’ai pas la double authentification de configuré sur mon nas 🙁
    j’ai toujours le problème et je n’arrive vraiment pas à comprendre pourquoi ….

Laisser un commentaire

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

*