Bonjour,
Tout simplement parce que je dispose d'un Arduino Uno et que le but de ce post est de connecter un Uno au Syno par usb.
Le Uno sert donc d'interface entre un signal d'alarme et l'activation des caméras de surveillance gérées sur le Syno par SurveillanceStation.
Le Uno est connecté à 3 diodes led pour surveiller les différents états possibles, un interrupteur simple pour activer ou désactiver les caméras et un relais qui se ferme ou s'ouvre en fonction du branchement de l'alarme.
Trois caméras sont gérées par SurveillanceStation, 3 caméras sont gérées directement par le script python et 1 caméra est gérée par ZoneMinder installé sur un Raspberry Pi 3 B. Le script Python qui réceptionne les commandes du Uno, gère donc l'activation de 7 caméras.
Exemple de script en Python 3 de gestion des caméras (activer ou désactiver) 1 ou plusieurs caméras du Syno en fonction de la documentation de l'API SurveillanceStation version 9 avec DSM version 7.
#!/usr/bin/env python
import requests
from urllib3.exceptions import InsecureRequestWarning
IP_nas = '###.###.###.###'
PORT_nas = '####'
dsm_url = 'https://'+IP_nas+':'+PORT_nas
username = '##########'
password = '##########'
num_camera = '#' # séparer par , si plusieurs caméras à activer ou désactiver
# désactive warning pour certificat en https
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
params={"api":"SYNO.API.Auth","method":"login","version":"6","account":username,"passwd":password,"session":"SurveillanceStation","format":"sid"}
rep=requests.get(dsm_url+"/webapi/auth.cgi",params=params,verify=False)
obj=rep.json()
#print (obj)
sid = obj['data']['sid']
#print(sid)
succes=obj['success']
#print (succes)
if succes==True:
print ("Entrée en session acceptée")
else:
print ("Entrée en session refusée")
# active/désactive caméra "method":"Enable" ou "method":"Disable"
# il est parfois nécessaire de changer la valeur de "version" en fonction de la documentation de l'API
params={"api":"SYNO.SurveillanceStation.Camera","method":"Disable","version":"9","idList":num_camera,"_sid":sid}
rep=requests.get(dsm_url+"/webapi/entry.cgi",params=params,verify=False)
obj=rep.json()
succes=obj['success']
#print (succes)
if succes==True:
print ("Caméra "+num_camera+" désactivée(s)")
else:
print ("Caméra "+num_camera+" impossible à désactiver")
#Infos
params={"api":"SYNO.SurveillanceStation.Info","method":"GetInfo","version":"7"}
rep=requests.get(dsm_url+"/webapi/entry.cgi",params=params,verify=False)
obj=rep.json()
print (obj)
#fin de session
params={"api":"SYNO.API.Auth","method":"logout","version":"2","session":"SurveillanceStation","_sid":sid}
rep=requests.get(dsm_url+"/webapi/auth.cgi",params=params,verify=False)
obj=rep.json()
succes=obj['success']
#print (obj)
if succes==True:
print ("Fin de session")
else:
print ("Fin de session impossible")