Script python pour liaison entre 2 Raspberry

Bonjour,

J’ai actuellement 2 Raspberry, le premier est connecté en rj45 et le second dans un endroit isolé en wifi. (Cela est pour la domotique)

Un seul est accessible vers l’extérieur c’est celui en connecté en rj45.

Je souhaiterai exectuer un script python sur le raspberry en RJ45 qui lancerait un script python se trouvant sur le raspberry en Wifi.
Si j’ai bien compris il faut que l’un soit en serveur et l’autre en client.

Je souhaiterai que le socket sur le serveur soit en écoute 24/24 7jours/7.
afin que le client puisse joindre le serveur à n’importe quel moment.
Mon problème c’est que je ne vois pas trop comment mettre cela en oeuvre sure les 2 raspberry et la programmation du script sur le client qui executera le script sur le serveur.

Pouvez-vous m’aider, svp?
Merci pour votre aide (ce site est vraiment génial !!! les échanges sont très constructifs et rapides).

hello,

le script sur le Rpi wifi aura en fait deux rôles:

  • ecouter si le Rpi rj45 lui parle
  • et s’il lui parle qu’est ce qu’il va faire

le Rpi RJ45 lui il parle sur le réseau a Rpi wifi a la demande.

plus concrètement sur le RJ45il y a un programme dit client qui se lancera quand on voudra communiquer avec Rpi Wifi
oui mais il communique quoi ? en fait on s’en fout du moment que le serveur sur Rpi wifi comprend !
ds l exemple la : Python réseau socket
c’est sur le client cette phrase :
socket.send(« Hey my name is Olivier! »)
qui envoie le message au serveur
lorsque le serveur la reçoit toujours ds le même exemple mais cette fois sur server.py :
response = client.recv(255)
if response != «  »:
print response
il affiche la reponse

j’imagine que ce que tu veux faire est un peu différent ! mais le morceau de code qui va être exécuté pour faire ton job se trouvera à la place du print response

donc en resume le client.py sur RJ45 est lancé a la demande
python client.py
et sur le wifi le programme server.py lancé au démarrage de la machine ( autostart ds lXde ou un systemd ) écoute les éventuels messages et lorsqu il en chope un il exécute la partie sous le test :
if response != «  »:

PS : dans le client.py il faut aussi modifier la ligne :
hote = « localhost »
par
hote = « 192.168.0.2 »
ou 192.168.0.2 est l’adresse du Rpi Wifi

Hello, si c’est pour simplement executer un script, sans communication ultérieure entre les deux pi, un bête lancement a travers SSH après échange de clefs et c’est réglé

tu pourrais expliquer comment on échange les clefs SVP ? j’ai fait un script comme ça avec expect et j’ai bien galéré ça fonctionne mais c’est plutot une grosse bidouille !
#! /usr/bin/expect -f

set force_conservative 1;

set timeout 2
spawn ssh pi@127.0.0.1
expect « Are you sure you want to continue connecting (yes/no)? »
send « yes\n »
expect « password: $ »
send « pass\n »
expect « pi@raspberrypi:~ $ »
send « sudo systemctl status gammu-smsd\n »
expect « (press RETURN) »
send « \n »
expect « (end) »
send « q\n »
expect « pi@raspberrypi:~ $ »
send « exit\n »
interact

Il ya quantité de tuto bien plus précis que moi sur le net ^^

En gros il te faut créer ta clef

ssh-keygen

Puis la copier sur l’autre pi

ssh-copy-id user@host

Puis si tu veux que la liaison soit bi-directionnelle faire de même dans l’autre sens :slight_smile:

ok merci pour l’info :wink:

Yo,
Dans la suite de l’échange entre @bof et @Gpapig (ça peut intéresser @Matrixx03 ) :
J’avais un Rpi qui se connectait en SSH sur un autre Rpi toutes les 5 minutes via une tache cron et j’avais procédé de la sorte (échange de clef RSA ) pour que tout soit automatique.
Toutes les 5 minutes, le Rpi1 envoyait ses photos et ses vidéos via internet (situé ailleurs) dans des dossiers sur un Rpi2 qui avait un serveur Web permettait de sauvegarder et visualiser les images.
ça fonctionnait nickel.
Je vais essayé de retrouver le tuto que j’avais suivi.
A noter qu’à un moment, il ne faut pas mettre de passe pour que ça fonctionne de manière automatique (sinon, ça demande un mot de passe à chaque appel de la clef … et là … c’est le drame :crazy_face:)

Merci à tous pour vos conseils.

Ce que je voudrai c’est la solution la plus simple et efficace à mettre en place pour mon besoin.

Concrètement, je vousdrai que sur le raspberry en rj45 je lance le script python « 1.py » avec la commande python 1.py ça se connecte sur le raspberry en wifi et que ça m’execute le script python « a.py ».
Et ainsi de suite avec d’autres scripts le scripts 2.py sur les raspberry en rj45 lance le script python sur les raspberry en wifi.

Dois-je procéder avec la solution Client / Serveur?
Merci pour votre aide et temps passé pour résoudre mon pb
:slight_smile:

Les scripts 1.py et 2.py (et cætera) font un truc sur le « Rpi RJ45 » ou le seul but est de lancer un ordre depuis le « Rpi RJ45 » vers « Rpi Wifi » pour lancer les scripts a.py, b.py, … ?

Je vous remercie tous pour votre aide.
J’ai trouvé la solution à mon problème, j’ai honte de vous le dire tellement que c’est simple :slight_smile:
Mon premier raspberry etait ouvert sur le port 22 par defaut et je n’avais pas pensé à le modifier pour des raison de sécurité. J’ai donc mis 2 ports différents sur chacun de mes 2 raspberry et je peux à présent les attaquer depuis l’exterieur.

Je vous remercie tous pour votre aide.

Ce forum est vraiment top, je le répète bonne entraide, rapide et efficace!
A bientot