Bonjour à toute la communauté,
Après avoir épuré tout ce que j'ai pu trouvé sur ce forum et sur le net je m'en remets à cette communauté pour trouver une solution à ma problématique.
Voilà le contexte :
j'ai un raspi 3 qui tourne avec Domoticz et tous mes dispositifs (rfxcom, controleur zwave, gateway xiaomi, etc...). Tous mes dispositifs tournent à merveilles.
Sur un autre raspi 3 j'ai installé motion (motion est gourmand en CPU) avec dans l'idée d'y configurer les 4 caméras dont je dispose pour surveiller le salon, l'entrée extérieure, la piscine, le garage. Jusque là toujours aucun soucis, tous les flux remontent bien juste des ajustements de résolutions non homogènes à régler mais rien de bien méchant.
A cela je voudrai me servir de mes caméras et de motion comme détecteur de mouvement pour déclencher des actions / notifications dans domoticz sur mon 1er raspi.
J'ai donc créé des interrupteurs virtuels qui sont déclenchés par motion lorsque les caméras détectent qq chose. Toujours aucun pb, cela fonctionne nickel grâce à l'API !
Contrainte supplémentaire, je souhaite pouvoir programmer le déclenchement des détections de mouvement uniquement lorsque nous ne sommes pas à la maison. Pour cela j'ai donc créé un interrupteur virtuel qui activera le service motion du raspi 2 uniquement sur certaine tranches horaires et le désactivera en mode "off". Et c'est là que ça se complique.
Mes scripts sh (que j'ai mis dans /home/pi/domoticz/scripts) sont simples :
start_motion.sh : "ssh pi@192.168.31.10 sudo service motion start"
stop_motion.sh : "ssh pi@192.168.31.10 sudo service motion stop"
pour moi les droits sont ok sur les scripts exécution pour tout le monde.
J'ai mis en place un système de clé entre les 2 raspi pour éviter l'autentification aussi bien pour le user pi que pour le user root (j'ai cru comprendre que domoticz exécute les scripts en contexte root.
Mes tests :
user pi :
exécution des commandes directes (ssh pi@192.168.31.10 sudo service motion start) ==> OK
exécution des scripts directes (sh /home/pi/domoticz/scripts/start_motion.sh) ==> OK
user root :
exécution des commandes directes (ssh pi@192.168.31.10 sudo service motion start) ==> nécessite que je relance un ssh-add avec ma clé à chaque fois ==> puis OK
exécution des scripts directs (sh /home/pi/domoticz/scripts/start_motion.sh) ==> nécessite que je relance un ssh-add avec ma clé à chaque fois ==> puis OK
via domoticz ==> KO : Error: Error executing script command (/home/pi/domoticz/scripts/start_motion.sh). returned: 65280
j'ai donc essayé de forcer le user pi dans la commande en y ajoutant en début de ligne "sudo -u pi" mais rien n'y fait
j'ai essayé aussi en ajoutant en début de ligne "su - pi -c" mais pareil
Si quelqu'un a une idée je suis preneur car là j'arrive à court
Script sh sur Pi distant
Re: Script sh sur Pi distant
salut,
ton ssh est sur le port 22 ?
Normalement tu as ajouté une clé publique dans le fichier authorized_keys du pi à controler, et tu as une clé privée sous forme d'un fichier dans le répertoire /home/pi/.ssh du pi qui contrôle l'autre. Je pense qu'il faut préciser le chemin de cette clé dans ton script. De plus, elle ne doit pas être protégée par une passphrase sinon le script bloquera puisqu'il demandera cette passphrase... Et ensuite je pense qu'il faut que domoticz, qui est root, exécute ton script en tant que pi puisque tu as configuré le ssh de pi.
ça donnerai
si le ssh du raspberry à controler n'est plus sur le port 22, il faut le préciser:
Ensuite il faut essayer, essayer et encore réessayer... Il se peut qu'il faille des guillemets ou des apostrophes, je ne connais pas parfaitement les règles:
ou
ou, même, ça m'est arrivé, bien que domoticz soit root, il faut parfois un petit sudo au début:
Si un spécialiste passe par là, je pense qu'il doit y avoir une écriture plus "propre", ou un moyen d'utiliser le ssh par clé sans devoir spécifier l'emplacement de la clé, en l'intégrant dans un fichier quelque part... Mais bon, tant que ça marche...
ton ssh est sur le port 22 ?
Normalement tu as ajouté une clé publique dans le fichier authorized_keys du pi à controler, et tu as une clé privée sous forme d'un fichier dans le répertoire /home/pi/.ssh du pi qui contrôle l'autre. Je pense qu'il faut préciser le chemin de cette clé dans ton script. De plus, elle ne doit pas être protégée par une passphrase sinon le script bloquera puisqu'il demandera cette passphrase... Et ensuite je pense qu'il faut que domoticz, qui est root, exécute ton script en tant que pi puisque tu as configuré le ssh de pi.
ça donnerai
Code : Tout sélectionner
-u pi ssh -i /home/pi/.ssh/ta_clé pi@192.168.31.10 sudo service motion startCode : Tout sélectionner
-u pi ssh -i /home/pi/.ssh/ta_clé pi@192.168.31.10 -p PORT sudo service motion startCode : Tout sélectionner
-u pi ssh -i /home/pi/.ssh/ta_clé pi@192.168.31.10 "sudo service motion start"Code : Tout sélectionner
-u pi ssh -i /home/pi/.ssh/ta_clé pi@192.168.31.10 'sudo service motion start'Code : Tout sélectionner
sudo -u pi ssh -i /home/pi/.ssh/ta_clé pi@192.168.31.10 "sudo service motion start"Re: Script sh sur Pi distant
bon et bien tu as raison c'est la passphrase qui devait bloquer
J'ai mis en place une clé sans passphrase pour le user pi et le user root et tout fonctionne nickel.
Merci pour le coup de main en tous cas
J'ai mis en place une clé sans passphrase pour le user pi et le user root et tout fonctionne nickel.
Merci pour le coup de main en tous cas