Arduino R4 → MQTT → Home Assistant
Bouton physique Arduino R4 & statut temps réel dans Home Assistant
Synthèse des étapes pour câbler un bouton, publier son état via MQTT et l’exposer proprement dans Home Assistant.
1. Préparer Home Assistant
1.1 Installer le broker MQTT (Mosquitto)
- Ouvrir :
Paramètres → Modules complémentaires → Ajouter - Choisir :
Mosquitto broker - Activer : démarrage au boot, affichage dans la barre latérale
1.2 Créer un utilisateur MQTT
- Aller dans :
Paramètres → Personnes & Utilisateurs → Utilisateurs - Créer un utilisateur local : par ex.
toto - Définir un mot de passe : par ex.
xyz
1.3 Configurer Mosquitto
Dans la configuration de l’add-on Mosquitto :
logins:
- username: toto
password: xyz
require_certificate: false
Redémarrer Mosquitto après modification.
2. Préparer l’Arduino UNO R4 WiFi
2.1 Câblage du bouton
- Bouton : une patte sur
PIN 3, l’autre surGND - Mode :
INPUT_PULLUP(interne) - Logique :
LOW = appuyé,HIGH = relâché
const int buttonPin = 3;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
}
2.2 Configuration WiFi
const char* ssid = "TON_WIFI";
const char* pass = "TON_MDP_WIFI";
Serial.print("Connexion WiFi...");
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
delay(5000);
Serial.print(".");
}
Serial.println();
Serial.print("Arduino IP = ");
Serial.println(WiFi.localIP());
2.3 Configuration MQTT
const char* mqtt_server = "192.168.0.210"; // IP de Home Assistant
const int mqtt_port = 1883;
const char* mqtt_user = "toto";
const char* mqtt_pass = "xyz";
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
3. Connexion MQTT & MQTT Discovery
3.1 Fonction de reconnexion MQTT
void publishDiscoveryConfig() {
const char* configTopic = "homeassistant/binary_sensor/boite_aux_lettres/config";
const char* configPayload =
"{"
"\"name\": \"Boite aux lettres\","
"\"unique_id\": \"boite_aux_lettres_arduino\","
"\"state_topic\": \"maison/boite_aux_lettres\","
"\"payload_on\": \"ON\","
"\"payload_off\": \"OFF\","
"\"device_class\": \"opening\""
"}";
mqttClient.publish(configTopic, configPayload, true);
Serial.println("MQTT Discovery config envoyée !");
}
void reconnectMQTT() {
while (!mqttClient.connected()) {
Serial.print("Connexion MQTT...");
if (mqttClient.connect("ArduinoR4", mqtt_user, mqtt_pass)) {
Serial.println("OK");
// Publier la configuration MQTT Discovery
publishDiscoveryConfig();
} else {
Serial.print("Échec, code=");
Serial.println(mqttClient.state());
delay(2000);
}
}
}
3.2 Initialisation dans le setup
void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT_PULLUP);
// Connexion WiFi (voir section 2.2)
// ...
mqttClient.setServer(mqtt_server, mqtt_port);
Serial.print("Test connexion TCP au broker...");
if (wifiClient.connect(mqtt_server, mqtt_port)) {
Serial.println("OK");
} else {
Serial.println("Échec TCP");
}
}
4. Publication de l’état du bouton
4.1 Lecture & publication sur changement
bool lastState = HIGH;
void loop() {
if (!mqttClient.connected()) {
reconnectMQTT();
}
mqttClient.loop();
bool currentState = digitalRead(buttonPin);
if (currentState != lastState) {
delay(50); // anti-rebond
currentState = digitalRead(buttonPin);
if (currentState != lastState) {
lastState = currentState;
const char* value = (currentState == LOW) ? "ON" : "OFF";
Serial.print("Boite aux lettres = ");
Serial.println(value);
bool ok = mqttClient.publish("maison/boite_aux_lettres", value, true);
Serial.print("MQTT publish envoyé ! Retour = ");
Serial.println(ok ? "1" : "0");
}
}
}
Le topic maison/boite_aux_lettres est celui que Home Assistant utilisera pour l’état du capteur.
5. Côté Home Assistant
5.1 Vérifier la réception MQTT
- Outils de développement → Événements
- Écouter l’événement :
mqtt_message - Appuyer sur le bouton : tu dois voir le topic et le payload
5.2 MQTT Discovery
Grâce au message publié sur
homeassistant/binary_sensor/boite_aux_lettres/config,
Home Assistant crée automatiquement :
- Entité :
binary_sensor.boite_aux_lettres_arduino - Type :
binary_sensor(device_classopening) - Source : MQTT (intégration MQTT)
5.3 Utilisation dans l’interface
- Appareils & Services → MQTT : l’appareil Arduino apparaît
- Tableau de bord : ajouter l’entité comme n’importe quel capteur
- Automatisations : déclencher notifications, lumières, scènes, etc.
6. Vue d’ensemble & statut
Chaîne complète
Bouton physique (PIN 3)
Arduino UNO R4 WiFi
WiFi 2.4 GHz
MQTT (Mosquitto)
MQTT Discovery
Home Assistant
Points clés
- WiFi : même réseau que Home Assistant, IP valide (ex.
192.168.0.77) - MQTT : broker Mosquitto sur
192.168.0.210:1883 - Auth : utilisateur
toto+ mot de passe configuré dans Mosquitto - Topic état :
maison/boite_aux_lettres - Discovery : topic
homeassistant/binary_sensor/boite_aux_lettres/config
Statut logique
WiFi connecté
TCP broker OK
MQTT connecté
Discovery publié
Capteur visible dans HA
Une fois ce schéma en place, ajouter d’autres boutons revient à dupliquer le pattern : nouveau PIN, nouveau topic, nouvelle config MQTT Discovery.
7. Extension possible
- Multi-boutons : SMS, Telegram, Volet, Porte, Courrier, chacun avec son topic et sa config
- JSON global : publier un état agrégé (ex.
maison/boite/etatavec plusieurs champs) - Heartbeat : topic
maison/boite/statuspour indiqueronline/offline - Historique : utiliser l’historique HA pour suivre les ouvertures de la boîte