Domotique épisode 3 : les sèche-serviettes, la sonnette et le compteur de gaz

Bonjour à tous,

Dans la première partie dédiée à ma domotique, je vous avais présenté le cœur du système et les premiers éléments que j’ai mis en place : le serveur, la gestion des volets roulants et la lecture de la téléinfo client de mon compteur EDF. Je vais maintenant présenter les modifications que j’ai apportées au tableau électrique et à la GTL (Gaine Technique du Logement : une sorte de grosse goulotte qui réunit les terminaisons des courants forts comme des courants faibles) dont fait partie mon compteur.

Partie matérielle

Connexion à la GTL

Pour relier la GTL à la carte d’interface, j’utilise un câble plat à 8 conducteurs, terminé par un connecteur RJ45, similaire à celui des volets roulants :

Connecteur RJ45 pour la connexion à la GTL. Sur cette ancienne photo, on voit l’Orange Pi Zero qui jouait à l’époque le rôle de serveur.
Connecteur RJ45 sur une photo plus récente. L’Orange Pi a été remplacé par le mini-PC Zotac.

Je n’avais pas explicité la manière dont était faite cette connexion. Je me suis contenté d’indiquer que ce câble allait jusqu’au tableau électrique à proximité. Et pour cause, il est juste en dessous :

Sur les 8 conducteurs, deux sont donc utilisés par la téléinfo client du compteur. Les autres me permettent de piloter deux sèche-serviette électriques, de savoir si quelqu’un a sonné chez moi en mon absence et de mesurer ma consommation de gaz.

Je vais maintenant décrire comment je m’y suis pris pour réaliser cela.

La première étape est de démonter la façade du tableau électrique et la GTL pour laisser un accès aux différents éléments :

GTL et tableau électrique ouverts. A droite, on voit mon robot serpillère Irobot Braava Jet dont je parlerai peut-être plus tard.

Les sèche-serviettes

Les deux salles de bain de mon appartement sont chacune équipées d’un sèche-serviette électrique. C’est une invention géniale : se sécher à la sortie de la douche avec une serviette chaude et bien sèche est vraiment agréable. Malheureusement, de base, ils sont quasiment inutilisables : en effet, ils sont équipés d’un thermostat sensible à la température de la pièce. Autrement dit, ils se déclenchent de manière à maintenir la salle de bain à une température prédéfinie. Ce n’est pas du tout le comportement que je souhaite : non seulement je n’ai pas besoin qu’ils soient en permanence tièdes, mais c’est en plus un gaspillage d’énergie. Je préfère qu’ils soient la plupart du temps éteints, sauf au moment de la douche. Dans ce cas, ils doivent délivrer leur puissance maximale indépendamment de la température ambiante.

Je pourrais arriver à mes fins en utilisant le fil pilote et en réglant le thermostat au maximum. En appliquant une demi-alternance positive sur le fil pilote, le radiateur serait éteint et si ce signal disparaissait, le radiateur passerait en mode Confort. Ce signal pourrait être facilement généré avec un opto-triac et une diode en série (cette solution est largement documentée sur Internet, par exemple ici). Toutefois, cette solution ne me convient pas car le radiateur serait allumé par défaut et mon interface devrait envoyer un signal pour le désactiver. Ainsi, si elle n’est pas fonctionnelle ou déconnectée, les radiateurs fonctionneraient tous les deux à pleine puissance.

Liste des différents états possibles sur le fil pilote. Source : https://www.planete-domotique.com/blog/2012/01/05/piloter-un-radiateur-grace-a-son-fil-pilote

Je préfère donc intercaler un relais sur l’alimentation des radiateurs : non seulement j’élimine leur consommation résiduelle lorsqu’ils sont en veille, mais je m’assure surtout qu’ils ne chauffent pas tant que l’interface ne le demande pas explicitement.

Idéalement, j’aurais besoin de relais montables sur rail DIN à bobine 5V ou 24V et capable de commuter 5A sous 230V. J’en ai quelques-uns qui répondent à ces critères, mais ils ne s’intègrent pas à la façade du tableau électrique. J’utilise alors deux contacteurs jour/nuit de chauffe-eau, qui conviennent certes parfaitement mécaniquement mais dont la bobine est en 230V.

Je dois donc réaliser un étage de préactionnement et j’utilise pour cela des opto-triacs MOC3041. Pour l’aspect mécanique, je démonte deux relais statiques Schneider ABS2SC01EB. Ces derniers sont constitués d’un optocoupleur et d’un transistor bipolaire de puissance en boîtier TO-220 (désolé, je n’ai pas pensé à relevé la référence de ce dernier, mais de mémoire c’était un Darlington assez vieux type TIP102). Je supprime donc ce dernier et remplace l’optocoupleur existant par l’opto-triac.

Je ne sais pas vraiment si piloter les relais directement via l’opto-triac est une bonne pratique, je n’ai pas trouvé beaucoup de littérature à ce sujet. La documentation constructeur spécifie un courant crête de 1A maxi pendant 100µs, mais pas de courant RMS. Les bobines des contacteurs ne consomment qu’une dizaine de milliampères, je décide donc de prendre le risque et de m’épargner l’intégration d’un triac. Il s’avère que cela fonctionne très bien depuis plus de deux ans maintenant.

Au niveau de la carte d’interface, les LEDs des opto-triacs sont pilotées par de simples sorties numériques. Des trames spécifiques sur la liaison série permettent d’activer ou de désactiver ces sorties. Les trames d’activation doivent être régulièrement réémises par le serveur pour garder les relais alimentés : leur absence pendant une durée prolongée provoque automatiquement la coupure du courant. Ainsi, en cas de plantage du serveur ou de défaillance de la liaison série lorsque les radiateurs sont allumés, ils ne resteront pas actifs indéfiniment.

Et voilà le travail !

La sonnette

La sonnette de l’appartement est montée en bas à droite du tableau, juste à côté des contacteurs. Je ne sais pas trop à quoi cela pourrait servir concrètement, mais il est très simple de connecter un relais en parallèle pour indiquer à la carte d’interface que quelqu’un a sonné. Ainsi, je peux être prévenu même pendant mon absence. J’ai donc réservé un fil dans le câble la reliant au tableau électrique à cet usage. Néanmoins, il n’est pas encore utilisé pour l’instant.

Le compteur de gaz

Sur le palier sont présents les compteurs de gaz de mon étage. Il y a un an et demi, GrDF a remplacé les compteurs traditionnels par des compteurs communicants “Gazpar” qui émettent quotidiennement par radio l’index de consommation. A l’instar du Linky pour l’électricité, celui-ci permet à l’utilisateur lambda de suivre sa consommation sur le portail Internet du fournisseur d’énergie. Pour Gazpar, il n’est possible de récupérer qu’à partir de J+1 (ou peut-être même J+2, je ne sais plus) la consommation totale du jour J. C’est mieux que rien, mais cela a plusieurs inconvénients :

  • Une seule valeur quotidienne interdit la possibilité de séparer les différents usages (par exemple, combien d’énergie a été consommé pour la vaisselle, la douche, le chauffage ?)
  • La latence de 24 à 48h n’est pas pratique du tout.
  • Et pour terminer, cela implique de passer par une API fournie par GrDF, et je n’aime pas avoir affaire à des tiers : si tout peut être fait en local, ce serait mieux.

Par contre, les compteur Gazpar ont une sortie qui délivre une impulsion tous les 10 dm3 de gaz consommés : m’interfacer dessus me permet donc de contourner ces limitations. Seul problème : il est situé au bout du couloir, dans les parties communes de l’immeuble.

Par chance, une gaine a été réservée lors de la construction du bâtiment entre chaque appartement et les placards techniques du palier. Je saute sur l’opportunité, d’autant plus que j’ai déjà en ma possession une trentaine de mètres de câble à deux conducteurs blindé qui fera parfaitement l’affaire :

Câble deux conducteurs utilisé pour se connecter au compteur de gaz

La gaine vide que je vais utiliser arrive en partie basse de la GTL. Une fois le câble attaché à l’aiguille existante, il n’y a plus qu’à la tirer en espérant que la jointure ne cède pas :

Sur le palier, mon gentil voisin qui a fait la même manipulation m’a préparé une place dans sa boîte de dérivation. En effet, nos gaines arrivent dans le placard technique réservé aux télécommunications, juste à côté. Nous utilisons donc un câble commun pour passer la cloison :

Pour se raccorder physiquement sur le compteur, il faut un connecteur femelle spécifique. Cela serait un boîtier plastique JAE MX44002SF1 et des contacts M44S05K4F1. Je parle au conditionnel car je n’ai pas personnellement vérifié : ces références sont disponibles chez la plupart des revendeurs de composants électroniques, mais souvent avec un volume d’achat minimum trop important.

J’ai donc décidé d’acheter un cordon tout fait chez materielelectrique.net. Avec les frais de ports, il faut compter une quinzaine d’euros. On peut se connecter à moindre frais avec des connecteurs “Dupont” sur les deux broches mâles du compteur mais je trouve que cela ne fait vraiment pas sérieux. On est quand même ici en train de s’interfacer sur un compteur de gaz. Pour information, cela ne ressort pas vraiment sur les photos, mais le connecteur est particulièrement profond.

Et voilà le travail ! Deux compteurs Gazpar connectés sur le même palier, on ne doit pas voir cela dans beaucoup d’immeubles :

Je peux ainsi ramener la sortie impulsions jusqu’à ma carte d’interface. Electriquement, cette sortie est semblable à un drain ouvert ou un collecteur ouvert. Elle est donc polarisée : je me souviens avoir dû inverser les deux fils pour pouvoir détecter la fermeture du circuit.

Chez moi, les impulsions durent environ 200 ms. Pour ne pas détecter de fausses impulsions dues aux parasites qui apparaissent parfois dans le câble relativement long, j’ai dû ignorer logiciellement celles plus courtes que 50 ms. Je ne connais pas le pouvoir de coupure (en tension et courant) de cette sortie. Dans mon cas, le contact est polarisé sous 3,3V avec une résistance de tirage de 1 kΩ

Partie logicielle

Il reste maintenant à adapter le logiciel pour gérer ces nouvelles fonctions matérielles.

Côté carte d’interface

Celle-ci fonctionne grâce à un STM32F401 installé sur une carte Nucleo. Le code est écrit en C et compilé grâce à Atollic TrueStudio. Le logiciel embarqué :

  • scrute les entrées logiques et émet une trame à destination du serveur lors d’un changement
  • lit les trames reçues du serveur et pilote les sorties numériques en conséquence.

Les trames échangées avec le serveur sont constituées d’un ou plusieurs caractères alphanumériques et terminées par le caractère de nouvelle ligne ‘\n’. Les nouvelles trames gérées amènent alors à la liste suivante :

Sens serveur -> interface :

RH\n : allumage du radiateur de la salle de bain du haut
Rh\n : extinction du radiateur de la salle de bain du haut
RB\n : allumage du radiateur de la salle de bain du bas
Rb\n : extinction du radiateur de la salle de bain du bas 
L\n : allumage de la LED verte de la Nucleo
l\n : extinction de la LED verte de la Nucleo

Sens interface -> serveur :

E123456789\n : index du compteur EDF en Wh, à 9 chiffres
Pxxxxxxx\n : remontée d'un plantage ou d'un (re)démarrage de la carte.
             Ne devrait jamais arriver.
 G\n : impulsion du compteur de gaz
 S\n : sonnette de l'appartement

A noter que les commandes “RH\n” et “RB\n” activent les radiateurs pendant une durée maximale de 30 minutes et le serveur renvoie toutes les 10 minutes ces trames tant qu’ils doivent être actifs. Ainsi, si le serveur plante pendant que les radiateurs sont en chauffe, ils ne resteront pas dans cet état indéfiniment.

Côté serveur

Pilotage des radiateurs

L’interface Web permet d’activer les radiateurs de deux manières :

  • Soit manuellement, de manière ponctuelle, via les boutons en bas : “Activer pendant X minutes“.
  • Soit de programmer des heures de fonctionnement pour les différents jours de la semaine.

Voici le visuel obtenu, comme d’habitude sobre mais efficace :

Comme pour les volets roulants, l’interface Web communique avec le démon fonctionnant en tâche de fond via des fichiers textes. Ils peuvent être soit stockés dans un ramdisk, soit sur le SSD du serveur, suivant s’ils doivent être placés dans une mémoire volatile ou non : le forçage temporaire peut être stocké en mémoire volatile, mais pas la programmation journalière.

C’est le démon qui analyse le contenu de ces fichiers textes et envoie en conséquence les trames d’activation ou de désactivation sur la liaison série à destination de la carte d’interface.

Affichage de la consommation de gaz

Le serveur écrit dans un fichier texte le timestamp courant lors de la réception de la trame “G\n“. Un nouveau fichier est créé chaque jour. Ainsi, il est très simple de tracer le graphique de consommation journalier, qui est réalisé, comme pour la consommation d’électricité, sur une page Web de mon site grâce à la bibliothèque jpgraph :

Ou plutôt, je devrais dire LES graphiques. Ces derniers sont alimentés par les mêmes données et donnent donc la même information, mais de manières légèrement différentes. Sur le premier, la consommation est cumulée depuis le début de la journée, mais sur le second, la consommation est réinitialisée à zéro si une durée suffisamment longue sans impulsion est présente. Cela permet d’isoler les différentes consommations ponctuelles au cours de la journée et de pouvoir plus facilement les comparer.

Ce billet est désormais terminé, je vous remercie de l’avoir lu ! À très bientôt pour les prochains.

2 commentaires

  1. Bonjour
    Concernant la connexion avec le compteur gazpar, vous n’indiquez pas quel connecteur est utilisé sur le compteur lui-même .
    Une photo de cette partie aurait été bienvenue.
    Est ce que des Duponts suffisent ou peut on faire mieux sans acheter un câble “officiel” a 15 € ? Il y a une polarité ?

    1. Bonjour et merci pour votre commentaire.
      Effectivement, je n’ai pas été très bavard à ces sujets. C’est corrigé 😉 merci pour la remarque.
      Je vous conseille vivement de passer par le connecteur adapté, cela fait quand même plus propre cela sera plus fiable sur le long terme (vis-à-vis de l’oxydation et de la résistance mécanique notamment). Mais les Dupont ont l’air de fonctionner aussi.

Répondre à Damien Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *