Script sh sur Pi distant
Publié : 04 janv. 2017, 22:30
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
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