Suivi de la Consommation Énergétique avec Modbus, MKR WiFi 1010 et RS485
Composants et fournitures
| Arduino MKR WiFi 1010 | × | 1 |
| Shield Arduino MKR 485 | × | 1 |
| Câble USB-A vers Micro-USB | × | 1 |
| Alimentation USB (compatible, le shield MKR485 a un convertisseur buck 7-24V intégré) | × | 1 |
| Câble blindé paire torsadée simple (pour ligne téléphonique) | × | 1 |
Outils et machines nécessaires
- Multimètre numérique autorange Digilent Mastech MS8217
- Ciseaux d'électricien
- Tournevis plat petit (pour bornes MKR485)
- Tournevis cruciforme moyen
Applications et services en ligne
- Home Assistant
- Arduino Web Editor
- MQTT
À propos de ce projet
Si vous voulez vraiment rendre votre maison plus intelligente, vous voudrez probablement commencer par vos factures mensuelles (énergie, gaz, etc.). Comme le dit le dicton : Bon pour la Planète, le Portefeuille et le Résultat Net. Le matériel open source est notre voie vers la durabilité dans l'environnement domestique ! Cette idée nous a amenés à construire une solution simple et sécurisée, facile à intégrer avec n'importe quel logiciel de domotique puisqu'elle expose les données via MQTT (nous montrerons comment l'intégrer dans Home Assistant).
Vue d'ensemble
Pour mesurer la consommation d'énergie électrique, nous avons choisi le Compteur d'Énergie Finder, conçu pour rail DIN et s'adaptant parfaitement dans le tableau électrique principal. L'avantage de ce produit est qu'il possède une interface RS485 Modbus, un protocole de communication industriel standard qui facilite grandement la communication avec un Arduino. En fait, Arduino a sorti un shield officiel, le MKR485 et deux bibliothèques pour décoder le protocole. Comme carte principale, nous avons choisi l'Arduino MKR WiFi 1010, car il partage le format MKR et dispose de la connectivité WiFi.
Installation
Attention ! Vérifiez la réglementation de votre pays concernant l'intervention sur votre installation électrique et soyez extrêmement prudent car cela peut être mortel ! Si vous ne savez pas comment faire, appelez un électricien.
La première étape est d'installer le compteur dans votre tableau électrique. Pour travailler en sécurité, coupez l'alimentation depuis le bornier en amont de votre installation et vérifiez au multimètre qu'il n'y a aucune tension entre les bornes.
Placez ensuite le compteur d'énergie dans votre tableau et connectez les fils phase et neutre du disjoncteur principal à l'entrée du compteur, en respectant le code couleur (bleu pour neutre, marron/noir/gris pour phase en UE). La sortie doit être connectée au reste de l'installation.
C'est fait ? Il est temps de visser la connexion RS485 ! Nous utiliserons un câble paire torsadée simple avec terre, typiquement utilisé pour lignes téléphoniques. Avec ce câble, vous pouvez transmettre sur de longues distances (1,2 km). Ici, nous utilisons juste une longueur suffisante pour sortir du tableau et placer l'Arduino dans un endroit accessible.
L'interface RS485 nomme ses bornes A, B et COM. Comme le shield MKR supporte aussi le Full Duplex, vous verrez deux autres bornes, Y et Z. Ici, nous allons visser l'autre bout du câble, car nous savons d'après la datasheet que la communication demi-duplex se fait uniquement sur les bornes Y et Z. La borne COM doit être connectée à ISOGND. Comme nous utilisons une connexion demi-duplex et que le câblage est pair-à-pair, nous devons configurer les commutateurs sur le shield MKR485 pour correspondre à notre configuration : nous mettons HALF (2 sur OFF) et terminaison sur Y-Z (3 sur ON) ; le premier n'importe pas. La terminaison est une résistance reliant les deux bornes de données, pour amortir les interférences.
C'est tout. Vous pouvez maintenant fermer le tableau et vous concentrer sur la partie logicielle !
Logiciel
Démarrez votre ordinateur et ouvrez votre IDE. Vous pouvez utiliser l'Arduino IDE ou l'Arduino Create Editor. Le code répond aux exigences suivantes :
- Communication Modbus
- Gestion WiFi
- Protocole MQTT
Modbus est un protocole open source pour capteurs et machines industriels. Pour faire parler Modbus à Arduino, nous allons utiliser la bibliothèque Arduino Modbus. Cette bibliothèque gère tous les handlers et rend le branchement de n'importe quel dispositif Modbus très rapide. Comme nous allons lire des registres, en suivant la datasheet du compteur, nous trouvons toutes les informations nécessaires : codes de fonction, adresse du registre, taille du registre en mots. Mais pour clarifier, expliquons comment fonctionne Modbus :
Les messages Modbus suivent une structure simple :
01 03 04 00 16 00 02 25 C7
0x01= Adresse du Dispositif0x03= Code de Fonction (ici lecture registres de maintien)0x04= Nombre d'octets (4 octets d'adresse de registre : 00 16)00 02= Taille du registre (00 02) en mots (1 mot = 2 octets)- 4 derniers octets = CRC (vérification d'intégrité)
Dans Arduino, tout cela est géré dans la condition if :
// Créé par Alberto Perro - Officine Innesto
// Lecture d'un entier depuis un dispositif Modbus (registres de maintien)
float readCurrent() {
float ampere = 0.;
// Formate la requête et l'envoie sur RS485
if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) {
// Gestion erreur
Serial.print("échec lecture tension ! ");
Serial.println(ModbusRTUClient.lastError());
} else {
uint16_t word1 = ModbusRTUClient.read(); // Lecture MSW depuis buffer
uint16_t word2 = ModbusRTUClient.read(); // Lecture LSW depuis buffer
int32_t milliamp = word1 << 16 | word2; // Assemblage des mots
ampere = milliamp / 1000.0; // Conversion en ampères
}
return ampere;
}
Dans la partie else nous avons le gestionnaire de réponse. Comme ce registre fait deux mots de long, nous devons les assembler avec des opérations binaires. Nous lisons les mots du buffer et les stockons dans un entier non signé 16 bits (2 octets = 1 mot), puis nous les joignons dans un entier signé 32 bits en décalant le premier mot à gauche et en appliquant un OR sur le second. Ainsi nous récupérons la mesure de courant en mA, en divisant par 1000 nous avons le courant en ampères.
Ce même processus est adapté à tout ce que nous voulons lire.
Le reste du code est dédié à la gestion MQTT et au réseau WiFi.
Intégration Home Assistant
Ajouter le compteur à Home Assistant est assez simple. En supposant que vous ayez un broker MQTT configuré (voir guide), il suffit d'ajouter de nouvelles définitions dans le fichier configuration.yaml.
sensor:
- platform: mqtt
name: "Tension Principale"
state_topic: "energy/main/voltage"
unit_of_measurement: "V"
Ici, vous mettez le nom de la mesure, le topic MQTT à lire et l'unité de mesure. Sauvegardez, vérifiez la configuration et rechargez Home Assistant, les mesures apparaîtront sur la page principale.
Home Assistant se chargera de créer des graphiques et d'automatiser des processus déclenchés par vos relevés. Ce tutoriel est terminé, à vous d'ajouter des fonctionnalités et de le personnaliser pour vos besoins !
Code
Pont Modbus RTU vers MQTT pour compteur Finder
Ce sketch fournit un pont complet entre le compteur d'énergie Finder et MQTT. Développé pour surveiller les coûts et la consommation d'électricité à Casa Jasmina.
Processus de fabrication
- Construire un robot piloté par Internet avec streaming vidéo Arduino & Raspberry Pi
- Créer un système Ambilight spectaculaire pour moniteur avec Arduino
- Moniteur d'énergie Arduino & Data Logger fiable – Guide complet (Dr. Wattson + carte SD)
- Créer des animations et jeux sur LCD avec Arduino UNO
- Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
- Moniteur de Fréquence Cardiaque IoT en Temps Réel avec Arduino et MAX30100
- Moniteur de Température et Horloge Temps Réel Arduino avec Écran TFT 3.2"
- Serveur Web Arduino Uno WiFi : Commander une LED via Navigateur
- Comprendre l'énergie cinétique et potentielle : formes, formules et exemples quotidiens