Aller au contenu

Activer/d


Sylar

Messages recommandés

J'ai fait un script qui permet d'activer/désactiver automatique Surveillance Station quand je quitte ou rentre de chez moi.

Je l'ai posté sur le forum Synology, mais je me suis dis que ça pourrait intéresser la communauté française de NAS-forum (que je consulte régulièrement pour bidouiller mon NAS ;) ), aussi je me permets de vous en avertir.

Voici un lien vers le sujet, que je compléterai plus tard avec la partie "téléphone".

http://forum.synology.com/enu/viewtopic.php?f=82&t=81181&p=304567#p304567

Je suis sûr que ce que j'ai fait est largement améliorable, donc n'hésitez pas !

EDIT : en voici une traduction pour les non anglophones.

------------------------------------------------------------------------------------------------------------------------

J’ai écrit un script qui fonction avec Tasker (sur Android) pour démarrer et stopper automatiquement Surveillance Station (SS) quand je pars ou reviens de chez moi. J’ai cherché longtemps comment faire, et après quelques tests, la solution ci-dessous marche plutôt bien. Evidemment, je suis certain que tout ça peut être largement amélioré, donc n’hésitez pas !

Pré-recquis :
- un ordinateur pour générer les clés SSH. C’est facile à faire sous Linux et OSX, et probablement sous Windows aussi
- sur le NAS : SSH doit être actif et fonctionnel, de même pour SS. L’accès à l’utilisateur root doit être possible depuis un autre utilisateur (non administrateur) avec la commande su.
- sur le téléphone : Tasker doit être installé, ainsi qu’un plugin SSH (j’ai mis des liens en bas du post). Ces 2 applications sont payantes, pour un total de 5 euros environ seulement. Il y a peut être moyen de passer par d’autres applications gratuites, donc si c’est le cas, dites le moi ! Evidemment, un téléphone Android est nécessaire, mais il y a probablement moyen de coder une application pour iOS qui ferait ce que je propose (mais je ne sais pas faire !)

Aller, en route !

1/ Adapter la configuration du serveur SSH

Idéalement, SS doit être démarré et stoppé par l’utilisateur root. Ce n’est pas un problème en soit, puisque la commande sudo est justement faite pour ça. Seulement, le script de démarrage de SS est passablement complexe, lance de nombreux binaires, etc., tant et si bien que la solution sudo n’est pas si évidente à utiliser. A la place, l’idée est de gérer SS justement par l’utilisateur root. Mais ceci nécessite que root est accès au NAS par SSH, ce qui n’est PAS DU TOUT une bonne idée. La solution consiste à utiliser les « commandes forcées » (forced commands), c’est à dire que l’accès root ne sera possible que pour lancer une commande spécifique.

1.1/ Modifier la configuration du serveur SSH
Pour permettre les commandes forcées, ajouter la ligne

PermitRootLogin forced-commands-only

au fichier /etc/ssh/sshd_config, et rebooter le NAS (j’ai stoppé et redémarré le serveur SSH, les modifications dans le fichier ne semblent prises en compte qu’au reboot … bizarre !)
Maintenant, l’utilisateur root peut accéder au NAAS, mais seulement pour lancer une commande spécifique précisée dans la clé SSH que nous allons générer maintenant.

1.2/ Génération des clés SSH
Sur l’ordinateur (ou sur le NAS, mais celui-ci étant moins puissant, la génération des clés sera plus longue), ouvrir un terminal, et lancer

% ssh-keygen -t rsa -b 8192 -C « yourname@yourphone »

Je génère ici une clé de 8192 octets et le paramètre -C permet d’ajoute un commentaire (on peut y mettre n’importe quoi). A noter que ceci est assez direct sous OSX ou Linux, il y’a probablement moyen de faire ça sous Windows, mais n’ayant pas de PC sous Windows je ne pourrai être plus précis ici.
L’utilitaire demande éventuellement une « passphrase » (un mot de passe protégeant la clé). Autant en mettre une, elle pourra être saisie plus tard dans Tasker une fois pour toute.
Une fois terminé (selon la longueur de la clé, ça peut être long, même sur une machine récente !), on dispose de 2 fichiers :
- id_rsa : c’est la clé privée, qui sera à transférer sur le téléphone plus tard (pour l’instant, laissons la où elle est !)
- id_rsa.pub : c’est la clé publique, que nous allons transférer sur le NAS.
Ces 2 fichiers sont normalement situés dans le répertoire « caché » .ssh/ de votre répertoire utilisateur.

1.3/ Connexion au NAS
Se connecter maintenant au NAS par SSH depuis un utilisateur standard, puis passer root à l’aide de la commande su. Puis :

% cd /root
% mkdir .ssh

(si le dossier .ssh/ existe déjà, sauter cette dernière commande)
Puis on va éditer le fichier « authorized_keys ». Si ce fichier n’existe pas, il faut le créer. Il faut ensuite copier la clé publique à l’intérieur de ce fichier (le contenu du fichier id_rsa.pub créé précédemment). authorized_keys doit alors ressembler à ceci (c'est une clé que j'ai générer pour ce tuto. Evidemment, votre clé étant différente, le fichier le sera aussi) :

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCds3+RK4zfG7L5JmNkaSVBPufUPQMJUIxYfesFAEuetHoD2Fvy/hojIXyG3VnSbzZfVZo4ptoXYtiij8fwf2kWzk0W/Dxrt/Npxzs5eUjZFgF+b16xF6YB1yW3tklJrRJmqmOjIQKl6b8tC3OEWbOMzrQrmtNPWL991XjUKT2mIPG5Hrt3fN/4WKiX8nwESr6FnxH97HyQWpPnEjfpBq6uoOuTCKBT8xi6v6L6ReNTvwkmf8k9zqABDE5oe4i48skQws88VMP0nT9wsSlV8J80MurOEX1WwxNByIMndj2shJS5P+gu6mHSufOLTTADUASor2uWZFWsgJyz9Bl7jgFT yourname@yourphone

Maintenant, une clé autorise l’accès root depuis SSH. Mais si on tente de se connecter directement, ça ne fonctionne pas ! Et heureusement, car la directive forced-commands-only n’autorise pas le login root, mais seulement le lancement d’une commande donnée. Cette commande doit être ajoutée dans le fichier authorized_keys au tout début de la clé. Par exemple, cela donnerait dans le cas de la clé précédent :

command="/bin/ls",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCds3+RK4zfG7L5JmNkaSVBPufUPQMJUIxYfesFAEuetHoD2Fvy/hojIXyG3VnSbzZfVZo4ptoXYtiij8fwf2kWzk0W/Dxrt/Npxzs5eUjZFgF+b16xF6YB1yW3tklJrRJmqmOjIQKl6b8tC3OEWbOMzrQrmtNPWL991XjUKT2mIPG5Hrt3fN/4WKiX8nwESr6FnxH97HyQWpPnEjfpBq6uoOuTCKBT8xi6v6L6ReNTvwkmf8k9zqABDE5oe4i48skQws88VMP0nT9wsSlV8J80MurOEX1WwxNByIMndj2shJS5P+gu6mHSufOLTTADUASor2uWZFWsgJyz9Bl7jgFT yourname@yourphone

Maintenant, si on tente depuis l’ordinateur :

% ssh root@NAS_IP

un « ls » est fait sur le NAS par l’utilisateur root. Et ce sera la seule commande qui sera accessible à l’utilisateur root en login direct (sans passer par su). Bien sûr, tout cela n’est possible que si la clé privée id_rsa est utilisée par le client SSH pour se connecter. Si ce n’est pas le cas, cela ne fonctionnera pas, et heureusement !
authorized_keys sera modifié un peu plus tard pour lancer la commande qui lancera ou stoppera SS.

2/ Script pour démarrer et arrêter Surveillance Station

Je propose le script suivant. Je ne suis clairement pas un expert des scripts shell, je suis donc certain qu'il peut être amélioré. Dans tous les cas, il fonctionne bien pour moi ;)

#!/bin/sh

cd /root/sStation
FILE1=here1

case "$SSH_ORIGINAL_COMMAND" in

    "start") # START SS ONLY WHEN LEAVING HOME
          if [ -e $FILE1 ]; then # If user1 was here                                                                                     
         rm $FILE1
         echo $(date): "ss START (User1 leaving home)" >> ss.log           
             /var/packages/SurveillanceStation/scripts/start-stop-status start > /dev/null 2>&1 # Launch SS
          echo 4 > /dev/ttyS1 # Turn POWER LED ON
          echo $(date "+%H:%M:%S"): "OK, Surveillance ON"
       else # User1 was not here ... so it means that SS is already ON !
         echo $(date "+%H:%M:%S"): "Surveillance already ON"
       fi
    ;;

    "stop") # STOP SS ONLY WHEN ENTERING HOME
          if [ -e $FILE1 ]; then # Oups, user1 is already here ...
         echo $(date "+%H:%M:%S"): "Surveillance already OFF"
       else # User1 is coming ...                                                                             
         echo bonjour > $FILE1
         echo $(date): "ss STOP  (User1 @home)" >> ss.log
             /var/packages/SurveillanceStation/scripts/start-stop-status stop > /dev/null 2>&1 # Stop ss
          echo 6 > /dev/ttyS1 # Turn POWER LED OFF
          echo $(date "+%H:%M:%S"): "OK, Surveillance OFF"
       fi
    ;;

    "status") # CHECK IF SS IS RUNNING
          ps | grep urveillance  > /dev/null
       if [ $? -eq 0 ]; then
         echo "SS is ON"
       else
         echo "SS is OFF"
       fi
    ;;

    *)
          echo "Sorry. Command forbidden."
       exit 1
    ;;
esac

Quelques commentaires :

- La première ligne "cd /root/sStation" indique où se situe le script sur le NAS. Il peut être mis n'importe où.

- j'utilise ici la variable SSH_ORIGINAL_COMMAND qui permettra de donner accès à root à une seule commande (spécifiée dans le fichier authorized_keys) qui peut réaliser différentes tâches. De cette façon, nous n'aurons pas à générer autant de clé spécifique à une action (start, stop, status, etc.), elle sera simplement spécifiée en argument.

- je garde une trace des démarrage/arrêt dans un fichier de log ss.log

- j'ai choisi d'allumer et éteindre la diode "power" de mon NAS pour indique si la surveillance est active ou non. C'est optionnel, évidemment ;)

- le script renvoie différents textes, en fonction de l'action et du contexte. C'est ce texte qui pourra être affiché sur le téléphone.

- enfin, à défaut d'avoir trouvé une autre façon de faire, le script démarre et arrête la surveillance : c'est complètement binaire ... J'ai essayé d'autres solution (désactiver seulement les caméras, ou utiliser l'API officielle), sans succès. Il y a certainement moyen de faire mieux !

3/ Tests, depuis un ordinateur

Tout est normalement prêt maintenant.

- tout d'abord, copier le script dans le dossier indiqué sur les premières lignes du script ci-dessus.

- le rendre exécutable (chmod +x /root/sStation/surveillance.sh, en tant que root, sur le NAS)

- ensuite, modifier le fichier authorized_keys situé dans /root/.ssh/ pour y indiquer que la seule commande autorisée est justement notre script :

command="/root/sStation/surveillance.sh",no-port-forwarding,no-X11-forwarding,no-pty
- vérifier que la clé privée est bien utilisée pour se connecter en tant que root sur le NAS depuis l'ordinateur (généralement, il faut que le fichier id_rsa généré précédemment soit dans /root/.ssh/)

- c'est parti ! Depuis l'ordinateur, il est normalement possible de lancer / stopper la surveillance :

% ssh root@NAS_IP start
ou
% ssh root@NAS_IP stop
ou
% ssh root@NAS_IP status

Pas besoin de spécifier la commande (surveillance.sh), celle-ci est déjà précisée dans le fichier authorized_keys. Seul son argument est à envoyer pour faire un start, stop ou status.

------------------------------------------------------------------------------------------

ATTENTION : ne pas continuer plus loin tant que l'étape 3 ci-dessus est OK !

------------------------------------------------------------------------------------------

4/ Tasker

- Installer Tasker et son plugin SSH (cf. fin du post)

- Je ne peux pas décrire le fonctionnement de Tasker ici. Il y a une tonne de tuto sur le web expliquant bien mieux que moi son fonctionnement. Basiquement, Tasker permet d'exécuter des tâches en fonction d'un contexte (un lieu par exemple). Il faut donc écrire 3 tâches, chacune pour lancer la commande start, stop et status. Et cela est rendu possible en exécutant exactement la même commande que depuis un ordinateur (cf. étape 3). Seulement, il nous faut transférer auparavant la clé privée sur le téléphone afin de l'autoriser à lancer la commande surveillance.sh. Copier donc le fichier id_rsa par le moyen que vous voulez (USB, FTP, etc.), et imaginons que ce fichier soit placé dans /storage/emulated/0/Tasker/ sur le téléphone.

- Créer une tâche, appelée par exemple "ss Status"
- A l'intérieur, utiliser le plugin SSH pour lancer la commande SSH "magique" :

- dans le champ adresse, rentrer « root@NAS_IP:22 » à adapter éventuellement en fonction de votre configuration)
- Ensuite, choisir "Keypair" et sélectionner la clé copiée à l'instant sur le téléphone
- rentrer la passphrase si celle-ci a été donnée lors de la création des clés (étape 1)
- puis, entrer la commande à exécuter. Ici, rentrer simplement "status"
- enfin, cocher « return output »n puis entrer le nom d'une variable (%ssout par exemple). Cette variable contiendra le texte renvoyé par la commande pour affichage.

J'ai mis des captures d'écran sur le thread synology cité plus haut.

Enfin, il ne reste plus qu'à créer de la même façon une tâche pour le démarrage, et une autre pour l'arrêt.

Tasker permet d'ajouter des raccourcis vers des tâches sur le launcher : en un clic, on peut allumer ou éteindre la surveillance

Puis on peut spécifier des conditions qui lanceront/éteindront automatiquement la surveillance : en fonction de la position, de l'heure, etc. Pour ma part, j'utilise maintenant un tah NFC que je scanne en partant et qui lance la tache "start" ;)

Voilà !

J'espère qu'à défaut d'être absolument complet, mon post vous donnera des idées !

Il y a moyen d'améliorer tout ça, c'est certain. Donc n'hésitez pas à le faire dans la suite du thread !

Tasker: https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm
SSH-plugin: https://play.google.com/store/apps/details?id=com.laptopfreek0.sshplugin.paid

Modifié par Sylar
Lien vers le commentaire
Partager sur d’autres sites

super, ça va répondre (en partie) à mon pb.

J'avais essayé avec la commande "synoservice -stop surveillance" mais ça ne semble pas fonctionner, le service est toujours ON, pourtant le cmde "synoservice -list" donne bien le service surveillance "OFF" !!

Je ne connaissais pas /var/packages/SurveillanceStation/scripts/start-stop-status stop, j'ai essayé, ça marche.

En fait, ce que je cherche, c'est plutôt désactiver une caméra, il y a une commande pour cela, sscamera -s <id camera> enable=0, mais étrangement, cette commande semble bien désactiver la caméra (elle apparaît en tant que tel dans l'interface Web) mais cette dernière continue à être active

Lien vers le commentaire
Partager sur d’autres sites

super, ça va répondre (en partie) à mon pb.

J'avais essayé avec la commande "synoservice -stop surveillance" mais ça ne semble pas fonctionner, le service est toujours ON, pourtant le cmde "synoservice -list" donne bien le service surveillance "OFF" !!

Je ne connaissais pas /var/packages/SurveillanceStation/scripts/start-stop-status stop, j'ai essayé, ça marche.

En fait, ce que je cherche, c'est plutôt désactiver une caméra, il y a une commande pour cela, sscamera -s <id camera> enable=0, mais étrangement, cette commande semble bien désactiver la caméra (elle apparaît en tant que tel dans l'interface Web) mais cette dernière continue à être active

J'ai beaucoup cherché également pour trouver une solution moins "binaire" que éteindre et allumer la surveillance. Tout ce qui se base sur sscamera n'a visiblement aucun effet ... Comme toi, la désactivation est seulement partielle : la caméra est désactivée sur l'interface web, mais continue à envoyer des données (et continue à détecter des mouvements). Ce que j'ai constaté, c'est que la désactivation depuis sscamera met les caméra dans le statut numéroté 1, tandis que la désactivation depuis l'interface web la met dans le statut numéro 2.

Donc pour l'instant, je n'ai pas d'autres solutions, malheureusement.

Modifié par Sylar
Lien vers le commentaire
Partager sur d’autres sites

j'ai contacté le support Synology à propos de sscamera, ils m'ont répondu qu'ils n'assuraient pas de support sur ce type de fonction...

Je vais explorer une autre possibilité : simuler ce qui est fait lorsqu'on déactive une caméra via l'interface Web en utilisant via un wget. La requête envoyée est :

http://<adresse syno>/webman/3rdparty/SurveillanceStation/cgi/camera.cgi?_dc=1392505123088&action=cameraDisable&UserId=1024&idList=2

Autre solution possible : droper les échanges entre la caméra et SS grâce à la cmde iptable

Modifié par SPoK
Lien vers le commentaire
Partager sur d’autres sites

  • 10 mois après...

je déterre le sujet car j'ai réussi a faire fonctionner tasker avec la dernière API Syno.

Du coup, plus besoin de SSH, il faut juste acheter l'appli tasker (et elle vaut largement son prix).

Je joint les profils tasker qui font ON et OFF

ON :

<TaskerData sr="" dvi="1" tv="4.6u1m">
	<Task sr="task5">
		<cdate>1420362366168</cdate>
		<edate>1420400412258</edate>
		<id>5</id>
		<nme>Ds On</nme>
		<pri>10</pri>
		<Action sr="act0" ve="7">
			<code>118</code>
			<Str sr="arg0" ve="3">http://%IPFREEBOX:%DSPORT</Str>
			<Str sr="arg1" ve="3">webapi/auth.cgi?api=SYNO.API.Auth&amp;method=Login&amp;version=2&amp;account=%DSLOGIN&amp;passwd=%DSPASSWORD&amp;session=SurveillanceStation&amp;format=sid</Str>
			<Str sr="arg2" ve="3"/>
			<Str sr="arg3" ve="3"/>
			<Str sr="arg4" ve="3"/>
			<Int sr="arg5" val="10"/>
			<Str sr="arg6" ve="3"/>
			<Str sr="arg7" ve="3"/>
			<Int sr="arg8" val="0"/>
		</Action>
		<Action sr="act1" ve="7">
			<code>129</code>
			<Str sr="arg0" ve="3">var arr = JSON.parse(global("HTTPD"));
var sid  = arr.data.sid;
setGlobal("SID",sid);</Str>
			<Str sr="arg1" ve="3"/>
			<Int sr="arg2" val="1"/>
			<Int sr="arg3" val="45"/>
		</Action>
		<Action sr="act2" ve="7">
			<code>118</code>
			<Str sr="arg0" ve="3">%IPFREEBOX:%DSPORT</Str>
			<Str sr="arg1" ve="3">webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&amp;method=Enable&amp;version=3&amp;cameraIds=1,2&amp;_sid=%SID</Str>
			<Str sr="arg2" ve="3"/>
			<Str sr="arg3" ve="3"/>
			<Str sr="arg4" ve="3"/>
			<Int sr="arg5" val="10"/>
			<Str sr="arg6" ve="3"/>
			<Str sr="arg7" ve="3"/>
			<Int sr="arg8" val="0"/>
		</Action>
	</Task>
</TaskerData>

OFF :

<TaskerData sr="" dvi="1" tv="4.6u1m">
	<Task sr="task16">
		<cdate>1420362366168</cdate>
		<edate>1420398959945</edate>
		<id>16</id>
		<nme>Ds Off</nme>
		<pri>10</pri>
		<Action sr="act0" ve="7">
			<code>118</code>
			<Str sr="arg0" ve="3">http://%IPFREEBOX:%DSPORT</Str>
			<Str sr="arg1" ve="3">webapi/auth.cgi?api=SYNO.API.Auth&amp;method=Login&amp;version=2&amp;account=%DSLOGIN&amp;passwd=%DSPASSWORD&amp;session=SurveillanceStation&amp;format=sid</Str>
			<Str sr="arg2" ve="3"/>
			<Str sr="arg3" ve="3"/>
			<Str sr="arg4" ve="3"/>
			<Int sr="arg5" val="10"/>
			<Str sr="arg6" ve="3"/>
			<Str sr="arg7" ve="3"/>
			<Int sr="arg8" val="0"/>
		</Action>
		<Action sr="act1" ve="7">
			<code>129</code>
			<Str sr="arg0" ve="3">var arr = JSON.parse(global("HTTPD"));
var sid  = arr.data.sid;
setGlobal("SID",sid);</Str>
			<Str sr="arg1" ve="3"/>
			<Int sr="arg2" val="1"/>
			<Int sr="arg3" val="45"/>
		</Action>
		<Action sr="act2" ve="7">
			<code>118</code>
			<Str sr="arg0" ve="3">%IPFREEBOX:%DSPORT</Str>
			<Str sr="arg1" ve="3">webapi/SurveillanceStation/camera.cgi?api=SYNO.SurveillanceStation.Camera&amp;method=Disable&amp;version=3&amp;cameraIds=1,2&amp;_sid=%SID</Str>
			<Str sr="arg2" ve="3"/>
			<Str sr="arg3" ve="3"/>
			<Str sr="arg4" ve="3"/>
			<Int sr="arg5" val="10"/>
			<Str sr="arg6" ve="3"/>
			<Str sr="arg7" ve="3"/>
			<Int sr="arg8" val="0"/>
		</Action>
	</Task>
</TaskerData>

Lien vers le commentaire
Partager sur d’autres sites

Payer alors qu'on sait faire ça soit même ?

Moi mon script surveille 2 GSM et active/désactivé les caméras selon qu'il sont dans le réseau local. Simple, efficace et gratuit

La je te rejoins sur ce point, surtout que au pire des cas il est possible de faire directement des raccourcis sur son bureau de téléphone après avoir génère la clef de session... Pourquoi faire compliquer quand on peux faire simple, nullement besoin de ssh...

Chacun voit midi à sa porte

Lien vers le commentaire
Partager sur d’autres sites

Payer alors qu'on sait faire ça soit même ?

Moi mon script surveille 2 GSM et active/désactivé les caméras selon qu'il sont dans le réseau local. Simple, efficace et gratuit

je suis très preneur de ton script si tu souhaites le partager.

Je souhaitais justement dans les semaines a venir travailler sur ce sujet.

Merci

Lien vers le commentaire
Partager sur d’autres sites

bon, j'ai pas trop eu le temps, je vais deja donner le script qui active / desactive et met en position home la camera

restera plus que la gestiion du ping sur les gsm que je doit reecrire, car ca a été codé à l'arrache ;)

cam_enable.py :

# Parametres a modifier ######
user = 'admin'
password = 'enter password here'
camera_number = 0
camera_preset = 0
base_url = 'http://127.0.0.1:5000/webapi/'
##############################

import sys
import urllib
import urllib2
import json

def call_syno_api ( path, values ):
	param = urllib.urlencode(values);
	r = urllib2.urlopen(base_url + path + '?' + param)
	j =  json.loads(r.read())
	if not j['success']:
		sys.exit( "Path : %s%s?%snError code : %s" % (base_url, path ,param, j['error']['code']) )
	return j

# Init
path = 'query.cgi'
values = {	'api' : 'SYNO.API.Info',
		'method' : 'Query',
		'version' : '1',
		'query' : 'ALL'}
list = call_syno_api(path, values)

# Login
path = list['data']['SYNO.API.Auth']['path']
values = {	'api' : 'SYNO.API.Auth',
		'method' : 'Login',
		'version' : '2',
		'account' : user,
		'passwd' : password,
		'session' : 'SurveillanceStation'}
ret = call_syno_api(path, values)
sid = '"' + ret['data']['sid'] + '"'

# Camera Select
path = list['data']['SYNO.SurveillanceStation.Camera']['path']
values = {	'api' : 'SYNO.SurveillanceStation.Camera',
		'method' : 'List',
		'version' : '6',
		'_sid' : sid}
ret = call_syno_api(path, values)
camera_id = ret['data']['cameras'][camera_number]['id']

# Camera activation/desactivation
path = list['data']['SYNO.SurveillanceStation.Camera']['path']
if str(sys.argv[1]) != "0" :
	# Activation de la camera
	values = {	'api' : 'SYNO.SurveillanceStation.Camera',
	 		'method' : 'Enable',
	 		'version' : '6',
	 		'cameraIds' : camera_id,
	 		'_sid' : sid}
	ret = call_syno_api(path, values)
	if str(sys.argv[1]) == "2" :
		# Selection de la position home
		values = {	'api' : 'SYNO.SurveillanceStation.PTZ',
	 			'method' : 'ListPreset',
	 			'version' : '3',
	 			'cameraId' : camera_id,
	 			'_sid' : sid}
		ret = call_syno_api(path, values)
		camera_preset = ret['data']['presets'][0]['id']

		# Move de la camera
		values = {	'api' : 'SYNO.SurveillanceStation.PTZ',
	 			'method' : 'GoPreset',
	 			'version' : '3',
	 			'cameraId' : camera_id,
	 			'presetId' : camera_preset,
	 			'_sid' : sid}
		ret = call_syno_api(path, values)
else:
	# Desactivation de la camera
	path = list['data']['SYNO.SurveillanceStation.Camera']['path']
	values = {	'api' : 'SYNO.SurveillanceStation.Camera',
	 		'method' : 'Disable',
	 		'version' : '6',
	 		'cameraIds' : camera_id,
	 		'_sid' : sid}
	ret = call_syno_api(path, values)
	 		
# Logout
path = list['data']['SYNO.API.Auth']['path'] 
values = {	'api' : 'SYNO.API.Auth',
		'method' : 'Logout',
		'version' : '2',
		'session' : 'SurveillanceStation',
		'_sid' : sid}
ret = call_syno_api(path, values)

dans le code, il y a 5 variable à modifier :

user = le nom d'utilisateur qui a le droit d'activer / desactiver la camera (admin par defaut)

password = j'espère que tous le monde compredra ce champ :P

camera_number = numera d'index de la camera dans l'ordre qu'elle ont ete declarée, première camera = 0

camera_preset = numero d'index de la position predefinie (pour la position home de la cam = 0)

base_url = url d'acces à l'api (a changer uniquement si utilisation sur un port différent ou à partir d'une autre machine)

le programme s'utilise avec un paramètre

python cam_enable 0 (desactive la camera)

python cam_enable 1 (active la camera)

python cam_enable 2 (active la camera et la positionne à la position prédéfinie)

voila, pour l'iddée du wget au lieu du ping, c simple, un wget sur un telephone renvoit une connection refusée qd il est present, un timeout qd il n'est pas là --> on a ce que l'on desire

Modifié par Gaetan Cambier
Lien vers le commentaire
Partager sur d’autres sites

Hum script en Python, spécial comme méthode...

Nasmatu je fais de l'enregistrement en permanence, mais pour le fun suite au sujet, j'ai fais un script qui fait patrouille ma caméra des que je suis absent, avec le ping par contre, mais en bash par contre et je l'exécute via le gestionnnaire de tâche, pas encore look pour le wget, maintenant je suis pas sûr que cela change grand chose, le téléphone coupant le Wifi en veille, s'il repond pas au ping, il répondra logiquement pas au wget...

Lien vers le commentaire
Partager sur d’autres sites

Décodé du JSON en bash c'est pas la joie, en python, c'est ultra simple

Ba sinon tu peux directement génère le pid, après un lien pour l'activation et la désactivation, sans kick la session.. Je trouve plus simple perso et on peux mettre les liens en raccourcis ou en curl si script bash directement.

Perso pour la patrouille de mes caméras, j'utilise pas surveillance station, trop merdique et limité à mon goût, je curl en bash directement la caméra, sa permet de temporiser différemment entre les positions et en continue.

Modifié par Einsteinium
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.