J’essaie de connecter une carte de 16 relais sur un Raspberry Pi 5.
Tout est câblé, pas de problème.
Pour l’instant, je n’arrive à activer/désactiver qu’un seul relais . J’ai demandé à ChatGPT de me faire un code Python pour contrôler les 15 autres relais, mais à chaque fois ça bloque les GPIO, ce qui me force à redémarrer pour les libérer. Donc pour l’instant, je me limite à un seul relais.
Home Assistant : À distance, sur mon téléphone, j’ai réussi à créer les 16 relais comme on peut le voir sur la photo 1 . MQTT reçoit bien l’information, et comme on le voit, avec le nom : relais/pi5/Relais1/set. Je pense que de ce côté-là, tout est nickel, la communication fonctionne bien.
Mais je n’arrive pas à faire communiquer MQTT avec le Raspberry Pi pour activer ce simple relais. C’est probablement juste une question de programme Python, mais comme ChatGPT fait souvent des erreurs et que je ne trouve pas beaucoup d’exemples sur Internet, je suis un peu bloqué. Merci d’avance.
Je ne suis pas convaincu que l’accès sur le pi ou est installé HA soit facile, précise de quel matériel il s’agit éventuellement ( la carte relais ) ainsi qu’un schéma de câblage éventuel.
Quand le programme Python fonctionne correctement, j’ai réussi à allumer chaque relais un par un avec une action qui s’éteint au bout de deux secondes. Je t’envoie le lien de la carte.
Sur la photo du premier message, on voit le paramétrage qui fonctionne pour le relais connecté au GPIO 17.
Maintenant, il faut que j’associe ce script Python à MQTT, qui reçoit bien les messages de home assistant .
Home Assistant est hébergé sur mon serveur, qui se trouve sur une autre adresse IP. J’avais oublié de le préciser, mais la communication fonctionne bien jusqu’au Raspberry Pi.
Bonjour,
je ne pourrais pas t’aider dans ce contexte, mais j’ai le même concept avec un PI pour HA et un ESP32 / ESPHOME qui pilote les relais sur une carte de ce type, ça me semble bien plus simple.
Utiliser un RPi 5 uniquement pour contrôler une carte relais peut sembler overkill si tu ne fais que contrôler des relais. Un ESP32 serait bien plus simple et économique.
Tu peux donner ton code python qui écoute MQTT et qui passe le GPIO à On/Off
Mais la première chose a faire avant d’attaquer le GPIO, c’est de t’assurer que quand tu écoute ton ou tes TOPIC que tu lis bien la bonne information.
Tu pourrais aussi donner plus d’information sur ta carte relais, c’est 16 entrée logique 0/1 pour activer les relais ?
Donc tu utilise 16 ports sur ton RPi pour piloter les relais
Quel gpio utilise tu ?
Les relais s’activent avec un signal LOW (0V) ou HIGH ?
Privilégie les GPIO « libres » comme GPIO 4, 17, 27, 22, 23, 24, 25, 5, 6, 12, 13, 16, 19, 20, 21, 26.
Mais globallement, su tu n’arrive déjà pas a piloter les relais du Pi en Python c’est qu’il y a effectivement un probable.
Comme tu dit que seul le GPIO 17 arrive a actionner le relais, il faudrait aussi faire un petit python qui tourne en boucle sur ce port en faisant du on/off et que tu branche tes relais un a un sur le port GPIO 17 pour voir si tous les relais répondent bien.
Si tous les relais répondent bien sur le GPIO 17 c’est sans doute que l’un de tes ports utilisé met en defaut ton Pi.
Éventuellement cette petite boucle on/off tu change de port dans le code pour voir les ports qui fonctionnent et ceux qui ne fonctionnent pas.
3. Voici le dernier programme « écoute » que j’essaye de faire avec ChatGPT, mais qui ne fonctionne toujours pas.
4. C’est une carte relais alimentée en 12 V pour enclencher les relais. Le Raspberry envoie seulement un petit signal de 3,3 V, et la partie en 230 V est une alimentation séparée.
J’avais déjà réussi à activer et éteindre tous mes relais, mais je n’ai pas sauvegardé le bon programme. Comme ChatGPT ne propose jamais exactement le même code, je n’arrive plus à retrouver la bonne version Python.
j’essaie le petit pyton GPIO 17 de l’integer a MQTT comme le relais fonctionne :
Le relais doit être contrôlé exclusivement par le scriptcontrole_relais.py.
Le script MQTTmqtt_relais_control.pydoit seulement écouter les messages MQTT, sans activer ou désactiver directement le relais, mais il doit simplement envoyer les commandes pour activer ou désactiver le relais via l’exécution du script controle_relais.py.
en exécutant le scriptcontrole_relais.pyà partir du message MQTT reçu.
#!/usr/bin/env python3
import paho.mqtt.client as mqtt
import time
# Configuration du broker MQTT
MQTT_BROKER = "x.x.x.x" # Adresse IP de ton broker
MQTT_PORT = 1883 # Port MQTT
MQTT_TOPIC = "Piscine_32/DS18B20/temperature_eau" # Remplace par ton topic MQTT a écouter
MQTT_USER = "mon_user" # Remplace par ton utilisateur
MQTT_PASSWORD = "mon_mot_de_passe" # Remplace par ton mot de passe
# Callback appelé quand le client se connecte au broker
def on_connect(client, userdata, flags, reason_code, properties=None):
if reason_code == 0:
print("Connecté au broker MQTT avec succès.")
client.subscribe(MQTT_TOPIC)
else:
print(f"Échec de la connexion, code retour : {reason_code}")
# Callback appelé quand un message est reçu
def on_message(client, userdata, msg):
print(f"Topic: {msg.topic} | Message: {msg.payload.decode('utf-8')}")
# Création du client MQTT avec le protocole v5 (ou v311 si nécessaire)
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
# Configuration de l'authentification
if MQTT_USER and MQTT_PASSWORD:
client.username_pw_set(MQTT_USER, MQTT_PASSWORD)
# Assigner les callbacks
client.on_connect = on_connect
client.on_message = on_message
# Connexion au broker
try:
client.connect(MQTT_BROKER, MQTT_PORT, 60)
print(f"Tentative de connexion à {MQTT_BROKER} sur le port {MQTT_PORT}...")
client.loop_forever()
except Exception as e:
print(f"Erreur : {e}")
except KeyboardInterrupt:
print("Arrêt demandé par l'utilisateur.")
finally:
client.disconnect()
print("Déconnecté du broker MQTT.")
Moi pour l’exemple j’écoute une sonde de température mis a jour dans mon Broker MQTT
root@debian-watermark:~/Scripts# python3 readmqtt.py
Tentative de connexion à 192.168.x.x sur le port 1883...
Connecté au broker MQTT avec succès.
Topic: Piscine_32/DS18B20/temperature_eau | Message: 22.37
Topic: Piscine_32/DS18B20/temperature_eau | Message: 22.37
Topic: Piscine_32/DS18B20/temperature_eau | Message: 22.44
Topic: Piscine_32/DS18B20/temperature_eau | Message: 22.37
Topic: Piscine_32/DS18B20/temperature_eau | Message: 22.31
voila un code qui fonctionne et qui devrait te donner ce qui est publié dans ton TOPIC MQTT
Il faut déjà que ça ça fonctionne
Tant ce type de truc ne fonctionne pas, tu ne peut pas lui donner de condition pour actionner tes relais.
En lisant ton code, je pense que tu ne t’abonne pas au bon TOPIC
Miracle, merci pour tes bonnes ondes ! J’ai intégré un programme avec ChatGPT, l’action se fait via un Home Assistant, eurêka. Bon, ça ne veut pas marcher tout de suite : quand j’active le relais, il lance un programme d’allumage et d’extinction. Je t’envoie le programme si j’arrive à faire quelque chose.
Il faut procéder pas a pas quand ce merde comme ça et qu’il a plusieurs acteur en cause.
Prends les choses une par une
Avance fonction par fonction
Tu aurait une vision de ton broker avec MQTTExplorer par exemple ?
Merci, j’ai utilisé ce logiciel pour écouter également, mais là j’utilise les journaux sur le Le raspberry pour pouvoir voir si ça communique, et là c’est nickel. Maintenant qu’il y a le lien, j’ai compris pourquoi il y avait ces cinq secondes : c’est mon programme que j’ai intégré à l’intérieur. J’ai voulu l’enlever, mais elle reste active. C’est vraiment Python qui nous embête.
Ouais moi aussi, avec ESPhome ça serait déjà fini et pour l’application même un ESP est largement overkill (mais faut avouer que c’est pratique) si pas besoin d’interface utilisateur un Arduino ferrait largement le taff (mais bon même les derniers arduino ont des procs 4 coeurs ARM…)
Au rythme où va l’informatique, il faudra bientôt un processeur à 16 coeurs à 15 Ghz pour faire une simple calculette 4 operations…
Merci beaucoup pour tous vos conseils. En fait, je débute dans le domaine et, comme je voyais des cartes relais chinoises avec un Raspberry pi intégré, je voulais avoir la dernière génération. Je voulais quelque chose d’automatique qui puisse se relancer tout seul. Donc, j’ai pris la dernière génération, avec un capteur de température, et je pourrai également commander une pompe de chauffage. Voilà, voici la configuration, et elle fonctionne enfin !