MySensors Linky – Programmation & Réglages

Réglage du BOD (Brown-Out Detection) :

Cette étape n’est pas obligatoire mais je la recommande afin d’éviter tout redémarrage intempestif de l’arduino et permet d’augmenter la puissance d’émission du NRF via le #define MY_RF24_PA_LEVEL.

Le BOD surveille la tension d’alimentation du microcontrôleur et s’assure qu’elle ne tombe pas en dessous de son seuil. Si tel est le cas, le contrôleur s’éteint jusqu’à ce que la tension soit augmentée au-dessus de ce seuil.

Notre arduino est une version 3.3v 8Mhz et par défaut le BOD est réglé à 2.7v. Il est possible de le baisser à 1.8v sans avoir de conséquence sur son fonctionnement

Pour réaliser cette opération, il faut impérativement passer par un rechargement du bootloader de l’arduino en modifiant ses fusibles internes. Tu auras besoin d’avoir un programmateur ISP ou un autre arduino disponible.

Voici la liste de fusibles, extrait du site d’Atmel.

Celui qui nous intéressent particulièrement est dans le premier tableau, les « extented fuses ». Pour un réglage à 1.8v, il faut les bits BODLEVEL2 et 3 à 1 et le BODLEVEL0 à 0..

Cette méthode est une parmi d’autres, comme celle avec le bootloader Optiboot. Pour ma part je suis rester avec le bootloader par défaut ATmegaBOOT. Tu trouveras un exemple sur ce site.

1 – Modifie le fichier le fichier boards.txt se trouvant sous « C:\Program Files (x86)\Arduino\hardware\arduino\avr » ou « C:\Users\[user]\AppData\Local\Arduino15\packages\arduino\hardware\avr\[X.Y.Z]\boards.txt« 

Dans la section de l’arduino pro mini 3.3v 8Mhz, il faut modifier la valeur pro.menu.cpu.8MHzatmega328.bootloader.extended_fuse et la mettre à 0xFE. Il faudra relancer l’IDE aduino pour la prise en compte de ce réglage.

## Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328P - BOD 1.8v
## ---------------------------------------------------
pro.menu.cpu.8MHzatmega328=ATmega328P (3.3V, 8 MHz) - BOD 1.8v

pro.menu.cpu.8MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.8MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.8MHzatmega328.upload.speed=57600

pro.menu.cpu.8MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.8MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0xFE
pro.menu.cpu.8MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex

pro.menu.cpu.8MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.8MHzatmega328.build.f_cpu=8000000L

2 – Connecter l’arduino pro mini sur un autre arduino (UNO par exemple) de cette manière :

UNO Pro mini
5V RAW (ne pas utiliser VCC !!)
GND GND
10 RST
11 11
12 12
13 13

3 – Branche l’arduino uno avec sa prise USB et tu le programmes en « hôte ISP » via le programme exemple « ArduinoISP ». Type de carte « Arduino UNO ».

4 – Tu peux maintenant graver le bootloader sur l’arduino pro mini en choisissant le programmateur « Arduino as ISP » et puis en cliquant sur « graver le séquence d’initialisation »

Il est possible de passer par le module FDTI USB 3.3v mais en utilisant le librairie minicore. Je n’ai pas encore le temps d’essayer cette autre méthode qui ne demande pas d’avoir un autre arduino sous la main. J’espère le faire très prochainement.. 😉

Programmation de l’Arduino

Pour réaliser la programmation de l’Arduino Pro mini qui est dépourvu de port USB, tu auras besoin d’un module FDTI USB 3.3v pour le téléversement du firmware. Il est possible d’en trouver sur Amazon ou Aliexpress.

Ce modèle d’interface FDTI a un cavalier permettant de choisir la tension de sortie 5v ou 3,3v. Dans notre cas il faut se mettre sur la position 3,3v sinon adieu petit Arduino…

Ensuite le positionner le connecteur 6 broches sur l’arduino comme indiqué sur cette image.

Etapes pour la programmation de l’arduino :

  • Télécharge et installe l’IDE Arduino
  • Télécharge les sources du firmware 1.0.x sur Github (version TIC historique), version 1.1.x pour la version TIC standard
  • Positionne le module FTDI sur l’arduino et branche le câble USB sur le PC/MAC
  • Dans le logiciel Arduino,
    1. va dans Outils -> type de carte et sélectionne « Arduino Pro »
    2. puis dans Outils -> Processeur et sélectionne « ATmega328P (3.3v, 8Mhz) »
    3. sélectionne le bon port par le menu Outils -> Port
  • Téléverse le firmware en appuyant sur

Après cette programmation, tu peux mettre l’ensemble des PCB dans le boîtier et le fermer sans oublier de brancher l’antenne à l’aide du connecteur IPX.

Pour les antennes à visser, j’ai créé un petit support qui se place sur le capot du compteur Linky.

Tu brancheras le module dans le compteur Linky juste après la demande d’inclusion sous Jeedom.

L’attribution de l’ID du node est par défaut réalisée par la gateway mais il est possible de le forcer via la ligne « #define MY_NODE_ID » dans le fichier TeleinfoMySensors.ino. Par exemple, pour forcer l’ID à 2 il faut simplement mettre la ligne « #define MY_NODE_ID 2« 

Le module envoie les informations en deux slaves, une toutes les 5 secondes regroupant toutes des données de consommation et l’autre toutes les minutes pour les données de référence du compteur. Il est possible de modifier ces valeurs via les variables SEND_FREQUENCY_CONSO et SEND_FREQUENCY_INFO.

uint32_t SEND_FREQUENCY_CONSO = 5000; // Minimum time between send (in milliseconds).
uint32_t SEND_FREQUENCY_INFO = 60000; // Minimum time between send (in milliseconds).

Vérification possible

J’ai réalisé quelques mesures sur la carte interface avec un multimètre si vous avez besoin de faire quelques vérifications. Attention ce n’est que des valeurs indicatives et surtout pour la sortie I1-I2 qui est en 50kHz.

  • – 1 – Sortie téléinfo I1-I2, en mode alternatif : variation entre 0 et 4,5 volts
  • – 2 – Sortie optocoupleur, en mode continu : variation entre 0,8 et 1,1 volts
  • – 3 – Sortie mosfet, en mode continu : variation entre 1,8 et 2,4 volts
  • – 4 – Sortie alimentation, en mode continu : 5 volts

Réglages possibles

Dans le code principal est il possible de régler :

  • la puissance d’émission du module NRF24L01 via la ligne #define MY_RF24_PA_LEVEL
    • #define MY_RF24_PA_LEVEL RF24_PA_LOW : réglage pas défaut
    • #define MY_RF24_PA_LEVEL RF24_PA_HIGH : plus de puissance mais la consommation sera plus grande; pas de garantie sur la stabilité du module via à vis de la puissance fournie par l’alimentation du compteur Linky. Le réglage du fusible BOD permet de contourner ce problème.
  • la canal d’émission utilisé via la ligne #define MY_RF24_CHANNEL
    • #define MY_RF24_CHANNEL X : X de 1 à 14 suivant l’occupation du wifi dans ton logement. Attention cette ligne doit être identique sur toute la chaîne de liaison Mysensors (Gateway, autres modules et capteurs Mysensors)

Réglages avec plugin Mysensors sur Jeedom

Pour rappel, le programme en version V1.0.x du module permet de remonter les informations des compteurs Linky monophasé mode historique sous cette forme :

  • CHILD_ID_ADCO 0
  • CHILD_ID_OPTARIF 1
  • CHILD_ID_ISOUSC 2
  • CHILD_ID_BASE 3
  • CHILD_ID_HCHC 4
  • CHILD_ID_HCHP 5
  • CHILD_ID_EJP_HN 6
  • CHILD_ID_EJP_HPM 7
  • CHILD_ID_BBR_HC_JB 8
  • CHILD_ID_BBR_HP_JB 9
  • CHILD_ID_BBR_HC_JW 10
  • CHILD_ID_BBR_HP_JW 11
  • CHILD_ID_BBR_HC_JR 12
  • CHILD_ID_BBR_HP_JR 13
  • CHILD_ID_PEJP 14
  • CHILD_ID_PTEC 15
  • CHILD_ID_DEMAIN 16
  • CHILD_ID_IINST 17
  • CHILD_ID_PAPP 18
  • CHILD_ID_ADPS 19
  • CHILD_ID_IMAX 20
  • CHILD_ID_HHPHC 21

Lors de l’inclusion sous Jeedom tu vas retrouver l’ensemble des informations sous forme de commandes avec l’id. Pour ADCO, l’id sera « 0 » par exemple. Le plugin MySensors permet de reconnaître automatiquement le module et la liste des infos mais sans les libellés et les unités. A toi de les renseigner manuellement sous Jeedom

Plus d’informations sont disponibles sur le site MySensors-Jeedom

Pour les compteurs triphasés, il faudra modifier le fichier TeleinfoMySensors.ino afin de récupérer les bonnes valeurs. C’est à dire au niveau de la structure teleinfo_s, les CHILD_ID, la fonction presentation() et la fonction send_teleinfo(). Voici la liste des informations disponibles :

Réglages avec plugin Mysensors sur Domoticz, Node-Red et autres :