Decodeur TIC Linky, Le Retour

suite le début de l'histoire

en 2018 @MicroQuettas avec d'autres complices on sculpté/codé un truc qui tourne pas mal .

j'ai adopter la version final? LkyRx_10d
, ajouter la partie MySensors et le bus RS485.
bien .... tout remonte sur le Controller, bref un bonheur .

Mais voila, SoftwareSerial (partie linky) et AltSoftSerial (bus RS485) , confie conflit , il y à des trous dans mes relevé :slight_smile:

c'est partie pour la suppression de SoftwareSerial avec la version LkyRx_06.zip , la plus simple ( .... en cours)

le croquis ino

/***********************************************************************
                        Récepteur TIC Linky
                        Mode historique

V03  : External SoftwareSerial. Tested OK on 07/03/18.
V04  : Replaced available() by new(). Tested Ok on 08/03/18.
V05  : Internal SoftwareSerial. Cf special construction syntax.
V06  : Separate compilation version.

V10a : Parametric version, initial. Tested OK on 23/10/19.
V10b : fixed bug in ptecIsNew(). Tested OK on 24/10/19.
V10c : added LKYSIMINPUT mode. Tested OK (partial) on 31/10/19.
V10d : adapted to Arduino Uno and Mega. Tested Ok on 27/04/20.

****** https://forum.arduino.cc/t/decodeur-tic-linky/512858/118 ****
Configuration parameters are defined in LinkyHistTIC.h
***********************************************************************/

//-------------------------------------------------------------------------
//******  Arduino ?? - MySesnsors sur bus RS485  *********  2022
//-------------------------------------------------------------------------

// Enable debug prints MySensors, Enable debug prints to serial monitor
//  #define MY_DEBUG   // mode standard terminal en 115200baud
//  #define MY_DEBUG_LOCAL
#define MY_BAUD_RATE 9600    // pour vitesse du terminal debug??

//----------------- MySensors --------------------------

  #define MY_NODE_ID 36                  /*Node en ID static*/
//  #define MY_TRANSPORT_WAIT_READY_MS 3000  //Timeout (ms) pour mis en Com.(0 pour aucun)
/* nécessaire lorsque pas connecté à la passerelle, pour des test*/

//.......... RS485 ..........................
//#define MY_RADIO_RF24
  #define MY_RS485  // Enable RS485 transport layer
  #define MY_RS485_DE_PIN 2      // Define this to enables Cmd DE-pin management on defined pin
  #define MY_RS485_BAUD_RATE 9600 // Set RS485 baud rate to use (9600 mode standard) 
 // #define MY_RS485_HWSERIAL Serial3 // choix du port RX-Tx sur Mega2560

  #define DELAY_PREFIX  50
  #define DELAY_PRESENTATION  100 // tempo du Wait

/***************************** Includes *******************************/

/*****************************  Biblio *******************************/ 
    #include <MySensors.h>

    #include <string.h>
    #include <Streaming.h>
    #include "LinkyHistTIC.h"

/**********************  MyS *******************************/

 // const char char_PAPP[] PROGMEM = "PAPP";

  #define CHILD_ID_OPTARIF 2      //  tarif en cours(???4 car.)
  #define CHILD_ID_HCHC 5       //Index heures creuses si option (9car.unité=Wh)
  #define CHILD_ID_HCHP 6       //Index heures pleines si option heures creuses (9car.unité=Wh)
  #define CHILD_ID_PTEC 16      //Période tarifaire en cours (4car.)
  #define CHILD_ID_IINST 18     //Intensité instantanée (3car. unité=ampères)
  #define CHILD_ID_PAPP 21      //Puissance apparente (5car. unité=Volt.ampères)

  #define char_AMPERE "A"
  #define char_VOLT "V"
  #define char_WATT "W"
  #define char_WATT_HEURE "Wh"
  #define char_VA "VA"
  #define char_KVA "kVA"
  #define char_VAR_HEURE "VArh"
  #define char_MIN "min"

  MyMessage msgTEXT( 0, V_TEXT);        // S_INFO
  MyMessage msgCURRENT( 0, V_CURRENT ); // S_MULTIMETER
  MyMessage msgVOLTAGE( 0, V_VOLTAGE ); // S_MULTIMETER
  MyMessage msgWATT( 0, V_WATT );       // S_POWER
  MyMessage msgKWH( 0, V_KWH );         // S_POWER
  MyMessage msgVA( 0, V_VA );           // S_POWER
 // MyMessage msgPrefix( 0, V_UNIT_PREFIX );

/****************************** Defines *******************************/

  boolean flag_first = true;

/****************************** Constants *****************************/
  const uint8_t pin_LkyRx = 10;
  const uint8_t pin_LkyTx = 11; 
  /* Tx !!! Not used but reserved  Do not use for anything else */

/************************* Global variables ***************************/

/************************* Object instanciation ***********************/
  LinkyHistTIC Linky(pin_LkyRx, pin_LkyTx);

/****************************  Routines  ******************************/

/******************************  Setup  *******************************/
  void setup()   {
  Serial.begin(9600);  /* Initialise serial link */
  Linky.Init();       /* Initialise the Linky receiver */
 // Serial << F("Bonjour") << endl;
   }

/******************* Presenstation MyS ********************************/
  void presentation() {
    sendSketchInfo("Teleinfo", "Ver2.4");  // Send the sketch version info sur gateway and Controller

    present (CHILD_ID_OPTARIF, S_INFO, F("OPTARIF"));
    present (CHILD_ID_HCHC, S_POWER, F("HCHC"));
    present (CHILD_ID_HCHP, S_POWER, F("HCHP"));
    wait(DELAY_PRESENTATION);
    present (CHILD_ID_PTEC, S_INFO, F("PTEC"));
    present (CHILD_ID_IINST, S_MULTIMETER, F("IINST"));
    present (CHILD_ID_PAPP, S_POWER, "PAPP");
    }

/******************************* Loop *********************************/
  void loop() {
    
  uint8_t i;
  Linky.Update();

// ----------- PAPP
  if (Linky.pappIsNew())   {
   //  Serial << F("Puis. app. = ") << Linky.papp() << F(" VA") << endl;
  send(msgVA.setSensor(CHILD_ID_PAPP).set(Linky.papp()));
  }
    
//----------- BASE
  #ifdef LKY_Base
  if (Linky.baseIsNew())
    {
   // Serial << F("Index base = ") << Linky.base() << F(" Wh") << endl;
    send(msgTEXT.setSensor(CHILD_ID_OPTARIF).set(Linky.base()));
    }
  #endif
  
//----------- HPHC
  #ifdef LKY_HPHC
  if (Linky.hchpIsNew())
    {
    //Serial << F("Index HP = ") << Linky.hchp() << F(" Wh") << endl;
    send(msgVA.setSensor(CHILD_ID_HCHP).set(Linky.hchp()));
      }

  if (Linky.hchcIsNew())  {
    //Serial << F("Index HC = ") << Linky.hchc() << F(" Wh") << endl;
    send(msgVA.setSensor(CHILD_ID_HCHC).set(Linky.hchc()));
    }

//------------------- Tarif en cours -------------    
  if (Linky.ptecIsNew())  {
    //Serial << F("Tarif en cours : ");
      
    if (Linky.ptec() == Linky.C_HPleines) {
      //Serial << F("heures pleines") << endl;
      send(msgTEXT.setSensor(CHILD_ID_PTEC).set("HPleines"));
      }
      else  {
      //Serial << F("heures creuses") << endl;
      send(msgTEXT.setSensor(CHILD_ID_PTEC).set("HCreuses"));
      }
     }
  #endif
  
//----------- IINST
  #ifdef LKY_IMono
  
  if (Linky.iinstIsNew())  {
    //Serial << F("I instant. = ") << Linky.iinst() << F(" A") << endl;
    send(msgCURRENT.setSensor(CHILD_ID_IINST).set(Linky.iinst()));
    }
    
  #endif
  
//----------- non utilisé
  #ifdef LKY_ITri
  
  for (i = Linky.C_Phase_1; i <= Linky.C_Phase_3; i++)  {
    
    if (Linky.iinstIsNew(i))  {
      //Serial << F("I Phase ") << i+1 << F(" = ") \
             << Linky.iinst(i) << F(" A") << endl;
      }
    }
  #endif

 // Send prefix au 1er démarrage , la remonter des points sur le Controller
  if (flag_first) {
    send(msgTEXT.setSensor(CHILD_ID_OPTARIF).set("option")); 
    send(msgVA.setSensor(CHILD_ID_HCHC).set(char_WATT_HEURE));
     wait(DELAY_PREFIX);
    send(msgVA.setSensor(CHILD_ID_HCHP).set(char_WATT_HEURE));
    send(msgTEXT.setSensor(CHILD_ID_PTEC).set("tarif en cour"));
     wait(DELAY_PREFIX);
    send(msgCURRENT.setSensor(CHILD_ID_IINST).set(char_AMPERE));
    send(msgVA.setSensor(CHILD_ID_PAPP).set(char_VA));
    wait(DELAY_PREFIX);
    }
    flag_first= false;
  } 
  /************ Fin de LOOP  *******************/
  

//------------------------ Fin Pgm ----------------------------

Bonsoir,

"en 2018 @MicroQuettas avec d'autres complices on sculpté/codé un truc qui tourne pas mal ."

Merci bien, ça fait plaisir ! :innocent:

A moins d'être sur Mega ou sur une carte minipro où le HW Serial n'est pas relié à l'adaptateur USB, je ne vois pas trop comment vous allez pouvoir vous passer de SoftwareSerial ?

A+ et bonne bidouille

MicroQuettas

l'USB est utilisé seulement pour la compil du sketch, après on reconnecte la Pin0 Rx sur le TIC.
et la com par le RS485 c'est sur les pin8-9 (AltSoftSerial ) .... fonctionnelle sur un autre croquis .

Bon La pour supprimer le "SoftwareSerial" c Coton :frowning:

j'arrive a des trucs ou je suis perdue .... un exemple

/*************** Constructor, methods and properties ******************/
#ifdef LKYSOFTSERIAL
LinkyHistTIC::LinkyHistTIC(uint8_t pin_Rx, uint8_t pin_Tx) \
      : _LRx (pin_Rx, pin_Tx)  /* Software serial constructor
                                * Achtung : special syntax */
#else
LinkyHistTIC::LinkyHistTIC(uint8_t pin_Rx, uint8_t pin_Tx)
#endif

.... _LRx = software serial instance ??

Bonjour,

"l'USB est utilisé seulement pour la compil du sketch, après on reconnecte la Pin0 Rx sur le TIC.
et la com par le RS485 c'est sur les pin8-9 (AltSoftSerial ) .... fonctionnelle sur un autre croquis ."

OK, c'est très clair.

"Bon La pour supprimer le "SoftwareSerial" c Coton"

Pas vraiment :blush:

  1. vous reprenez les versions d'origine de LinkyHistTIC.h et .cpp pour être sûr de votre point de départ,
  2. dans LinkyHistTIC.h, vous décommentez la ligne 32 et vous lui dites d'utiliser "Serial",
#define ARDUINOMEGA Serial    /* Define the serial input used   */
  1. dans votre fichier .ino, vous instanciez comme précédemment
#include "LinkyHistTIC.h"
.........
/****************************** Constants *****************************/
const uint8_t pin_LkyRx = 10;
const uint8_t pin_LkyTx = 11;   /* !!! Not used but reserved !!! 
                                  * Do not use for anything else */
.........
/************************* Object instanciation ***********************/
LinkyHistTIC Linky(pin_LkyRx, pin_LkyTx);

Les numéros de pin peuvent être quelconques, ou même absents LinkyHistTIC Linky(); dans tous les cas ils seront ignorés par le constructeur.

  1. dans votre setup(), commentez l'initialisation du port Serial
  /* Initialise serial link */
//  Serial.begin(9600);

et c'est tout.

Bien entendu, vous n'avez plus d'entrée USB. La sortie PD1/TX fonctionnera toujours, mais à 1200Bds. Vous pouvez la conserver pour du debug.

Bonne bidouille,

MicroQuettas

.... Super c'est fonctionnelle, merci pour l'aide @MicroQuettas
je laisse tourné deux ou trois heures pour vérification mais les 1er relevé ne me donne
plus de troue dans les courbes de mesures.
j'ai à revoir les unitées de puissances coté MyS .... KWH et WH.

.... a suivre :wink:

Oui cella tourne sans erreurs.

sur un Uno avec MySensors en mode RS485 et le décodeur Tic c'est du :
30% de l'espace de stockage de programmes.
43% de mémoire dynamique. ..... cooool :slight_smile:

une question , quelle utilité ??? quoi activer désactiver pourquoi ???
/************* tariffs and intensities configuration *****************/
//#define LKY_Base true /
Exclusif avec LKY_HPHC /
#define LKY_HPHC true /
Exclusif avec LKY_Base /
//#define LKY_IMono true /
Exclusif avec LKY_ITri /
//#define LKY_ITri true /
Exclusif avec LKY_IMono */

sinon sinon ... oui j'ai aussi désactivé le

#ifdef LKYSOFTSERIAL
//#include <SoftwareSerial.h>

oui gagner encore en mémoire et clarté/simplicité du code en supprimant les lignes en rapport avec SoftwareSerial ?????

aller c partie pour la mis en boite du module, fer a souder marteau burin :slight_smile:

Encore Merci de ton Aide .

Bonsoir,

Les distributeurs d'électricité ont plusieurs tarifs.
Le décodeur en implémente deux : le "base" et le "HPHC" (heures pleines, heures creuses ou jour /nuit).
Le décodeur est optimisé à savoir qu'il ne cherche que les trames qui correspondent au tarif pour lequel il est configuré. Il ignore les autres.
Même chose pour le mono ou triphasé.

La config:

/************* tariffs and intensities configuration *****************/
//#define LKY_Base true / Exclusif avec LKY_HPHC /
#define LKY_HPHC true / Exclusif avec LKY_Base /
//#define LKY_IMono true / Exclusif avec LKY_ITri /
//#define LKY_ITri true / Exclusif avec LKY_IMono */

correspond au tarif HPHC, monophasé (par défaut).
Tout cela se fait automatiquement avec les directives du préprocesseur (les "#ifdef"). Les parties inutiles ne sont pas compilées, donc ne prennent pas de place et ne grèvent pas les performances.
Je vous recommande d'approfondir les directives du préprocesseur (tout ce qui est en #xxx) avant de les modifier.

Dans le même ordre d'idée, désactiver

#ifdef LKYSOFTSERIAL
//#include <SoftwareSerial.h>

en commentant

#include <SoftwareSerial.h>

est inutile puisque LKYSOFTSERIAL n'étant pas défini, l'include n'est pas exécuté...

Vous ne gagnerez rien en taille du code, mais risquez de vous retrouver avec un code qui ne marche plus !

Bonne bidouille et bon courage pour la mise en boîte.

Au fait, c'est quoi le projet final ? Qu'est ce qu'il fait, le MySensor ?

MicroQuettas.

tu veux dire que le programme commente//dé-commente (active/désactive) les lignes
de "tariffs and intensities configuration" ??? l'humain n'a rien a modifier :frowning: :slight_smile:

oui désactiver le <SoftwareSerial.h> me doutai bien que inutile.

"Au fait, c'est quoi le projet final ? Qu'est ce qu'il fait, le MySensor ?" de la Domotique

Une philo a contre courant du moment, rien de monolithique, de l’intelligence répartie, rester sur du minimum, un 8bits peut faire beaucoup de choses.

utiliser la constellation de MySensors https://www.mysensors.org/build .... un super Boulot (merci à eux )
l'utiliser en filaire (CAN ou RS485) , sectionner les familles (Elec - intrusion - Chauff ...)
des modules qui dialogue entre eux.

un superviseur le plus simple/solide possible, pour la visu ou passer des commandes / valeurs MyController
maintenue par jkandasa
.... une video démo d MyC

et sur un base matériel Odroid C2

pour les Controlleurs , la sur les 24 du tableau, j'en ai tester 8 :slight_smile:
Tableau .... certain une heures et d'autres 1 an .

Mais pourquoi faire ce Biz , bah la j'ai pas la réponse :slight_smile:

Bonjour,

tu veux dire que le programme commente//dé-commente (active/désactive) les lignes
de "tariffs and intensities configuration" ??? l'humain n'a rien a modifier

On en est pas là, fort heureusement !

  1. l'humain dit ce qu'il veut, il configure le programme d'une manière simple (une seule ligne à commenter /décommenter),
  2. dans tout le programme, le préprocesseur ne donne au compilateur que ce dont l'humain a besoin,
  3. le compilateur construit le programme a minima...

Pour l'approche domotique, j'ai qq chose de semblable à la vôtre:

  1. des contrôleurs indépendants qui font tout dans leur domaine, y compris l'interface avec l'humain,
  2. interface homme machine Web (pas besoin de client ni d'appli, marche avec n'importe quel téléphone, tablette ou PC),
  3. un tableau de bord qui synthétise les infos et renvoie vers les contrôleurs individuels, mais le système peut fonctionner sans,
  4. communication en WiFi pour tout le monde,
  5. processeurs ESP8266 (pas chers et très puissants).

J'en ai publié deux bouts : le Linky et un contrôleur de volets roulants.

A+ et bonne bidouille,

MicroQuettas

.... Yo

"Pour l'approche domotique"

  1. et 2. contrôleurs indépendants : oui bon choix , serveur embarqué avec GUI .
  2. "tableau de bord qui synthétise les infos " des contrôleurs ... superviseur Html ???

.. "J'en ai publié deux bouts : le Linky et un contrôleur de volets roulants." :slight_smile:

Sinon j'ai continué ma lecture du code, et oui cella devient presque clair,
le tableau txt avec "<-- Switches d'option -->" en raport avec les lignes à commenter.
...simple , normal :slight_smile:

j'ai tester la remonter de ISOUSC (pour futur calcul de délestage ou Alarme seuil haut ... un gyrophare sur le compteur ?? :slight_smile: )
https://forum.arduino.cc/t/decodeur-tic-linky/512858/52
décortiqué la version LkyRx_tri06c.ino (2.51 KB) pour récup des lignes en rapport.

je sais pas si possible d'un ajout, lorsque ta un moment , un Linky.Isousc a dispo serait une bonne choses pour des calculs. (une valeur fixe qui n'est pas vraiment utile à remonter )

... bon weekend

Bonsoir
montage/soudures en cours, ajout d'une "alarme" visuel sur dépassement de seuil .
hystérésis sur valeur PAPP

...
 //----------  Hysteresis define seuil PAPP ----------------
  #define Alarm_PIN 12
  #define Alarme_ON 1  // Valeur pour activer le relais (led) 
  #define Alarme_OFF 0 
  
  int seuil_papp = 5500 ; 	// seuil de basculement en VA
  int val_papp ;			// valeur PAPP en cours
  int HYST = 10;        	// seuil hystérésis en vA
  bool StatHyst = false;    // etat seuil
...
//..setup..
  digitalWrite(Alarm_PIN, Alarme_OFF);  //sortie désactivés au démarrage
  pinMode(Alarm_PIN, OUTPUT);           // Led Alarm
  
//...Loop...
  // ...............  hystérésis  sur valeur PAPP ................
  if (val_papp > (seuil_papp + HYST )) {
    StatHyst = true;
    digitalWrite(Alarm_PIN, StatHyst);
    }
  if (val_papp < (seuil_papp - HYST )) { 
    StatHyst = false;
    digitalWrite(Alarm_PIN, StatHyst);
    }    

surement passer à trois Leds : normal - attention - risque coupure.

Une petit récap sur le Linky, peut être des erreurs !?

le compteur linky surveille le courant et facture une puissance .
Ce qui est facturé c'est la consommation d'énergie active, donc la puissance active en Watts x par le temps de fonctionnement en heures. donne des kWh.

Linky se base toujours sur le courant pour la coupure, pour calculer le courant/puissance ils utilisent la valeur 200V.
Linky autorise un dépassement de puissance de 30 % une puissance exprimée en kVA puissance apparente (kVA).

valeur ADPS:
Avertissement de dépassement de puissance souscrite ( 3 car. unité = ampères)
message émis uniquement en cas de dépassement effectif, dans ce cas il est immédiat.

https://collectif-accad.fr/site/linky-et-la-disjonction-2eme-partie/

Bonjour,

Et voici la nouvelle livraison :

  • davantage de possibilités de configuration aux entrées et aux processeurs (y compris ESP8266),
  • tarifs "base" ou "HPHC",
  • mono ou triphasé,
  • ISOUSC en option.

LkyRx_10e.zip (9.4 KB)

Pour le reste, JeeLet a presque tout dit. En résumé :
PAPP de coupure = ISOUSC * 200 * 1.3 (en mono, *3 en tri).
Il manque juste la temporisation par filtrage passe-bas en cas de dépassement. C'est expliqué dans la doc Enedis (ENEDIS-NOI-CPT_54E V3).

Bonne bidouille,

MicroQuettas

.. Ahh Oui , on rigole plus :slight_smile:

Super kool , je définie mon " LKYCONFIG " à 5 et ça roule, trop fort .
( et merci pour le ISOUSC )

mis en service soir la version 10E et c'est impeccable, j'en ai profité pour ajouter/modif le chenillard à 3Led .. 3 seuil pour du visuelle, le délestage de certain circuit de la maison c'est un truc trop sérieux , des castagnettes avec un contacteur bonjour les risques d'incendie.
La il faut un code simple/solide qui retombe toujours sur c pattes .... je vais chercher .

3 plages 3 Leds 2 seuils

//variables
	const byte pinLED_R = 12; //déclaration de la led rouge
	const byte pinLED_J = 11; //déclaration de la jaune
	const byte pinLED_V = 10; //déclaration de la led verte

       int seuil1 = 1500;  // pour test
       int seuil2 = 2500; 
  
  bool statR = false;
  bool statJ = false;
  bool statV = false;

//----setup
	pinMode( pinLED_R , OUTPUT);  // mode sortie 
	pinMode( pinLED_J , OUTPUT);  
	pinMode( pinLED_V , OUTPUT);  

	digitalWrite(pinLED_R , LOW);  //sortie désactivés au démarrage
	digitalWrite(pinLED_J , LOW);
	digitalWrite(pinLED_V , LOW);

//----Loop
	if (val_papp > seuil2 ) { statR = true; } else {statR = false; }                  
	if (val_papp >= seuil1 && val_papp <= seuil2 ) { statJ = true; } else {statJ = false; } 
	if (val_papp <  seuil1 ) { statV = true; } else {statV = false; } 

	digitalWrite(pinLED_R, statR );   // Led rouge allumer au dessus du seuil2
	digitalWrite(pinLED_J, statJ );   // led jaune allumer entre seuil1 et 2
	digitalWrite(pinLED_V, statV );   // led verte allumer en dessous du seuil1

Merci @MicroQuettas

Bonjour, je ne me suis pas présenté mais je suis maintenant retraité de l'INRA de nantes et béotien. J'arrive sur votre forum car j'ai souscris depuis le 2 decembre à l'option Tempo HC/HP et je constate une différence entre les créneaux pilotés par le distributeur Enedis ( HC 22h-6h) et le fournissuer consultable sur edf&moi qui facture selon l'ancienne formule du contrat initial ( dit non modifiable) soit ( HC = 1h40'- 6h40' + 12h40'-14h40' ) si j'en crois leur representation en barre graph par segment de 30'.
En conséquence le contact sec déclenche le contacteur de délestage à 22h et lance le chauffage de mon chauffe eau et resistance de sol ( je suis en triphasé) à 22h decompté en tarif HP et quand arrive 1h40' le chauffe eau a terminé sons cycle de chauffe. EDF 3004 me dit qu'il faut que je fasse appel à un electricien pour faire régler mon installation. Celà veut il dire ajouter un retardateur sur la commande du délesteur ?
De plus la pause méridienne a été suspendue par l'arrété du 22 septembre 2022 mais le créneau de midi est encore comptabilisé en HC selon edf&moi (ou particulier.edf.fr ).
Auriez vous observé ce genre d'anomalie(s) ?
Celà incite à implémenter vos solutions.
Success to your projects. Hervé

Bonsoir
pour l'instant c'est seulement de la télé-information de valeurs fournie par le compteur Linky.
pas de délestage ou selection hP hC mis en application , et beaucoup de termes que vous employer me sont inconnus.

Merci , mon intervention mal recue par l'interlocuteur EDF au 3004 semble avoir cependant porté ses fruits car les anomalies d'imputation ont été corrigées ( sur l'historique) en cohérence avec le nouveau créneau HC 22h_6h .
Je me plongerai peut être dans votre spécialité à l'avenir , mais mon fils m'a offert un Raspberry Pi 3 peut être offrant certaines analogies. Cdt

Bonsoir,

A ma connaissance, les fournisseurs facturent sur la base des indexes.
Regardez si c'est bien l'index HC qui avance quand le contact est activé et à quelles heures.
Il n'y a rien à bidouiller, il suffit de regarder le compteur et de faire défiler les données.

Le Raspi 3 est une super machine, mais voyez plutôt le forum Raspberry.

Bonne bidouille
MicroQuettas

... pâté de soudures c'est finie, montage en images


sur une base Uno et shield RS485 de chez DFRobot , soudure du décodeur de trames , 3leds, OLED i2c a venir
https://wiki.dfrobot.com/Arduino_RS485_Shield_SKU__DFR0259

la sur un Nano
https://nsm09.casimages.com/img/2022/12/08//22120809270023870818065666.jpg
... mais c foireux, non fonctionnelle, le nano n'a pas assez de puissance pour alimenter l'interface RS485 et le décodeurs , au broyeurs temporel .

une compile dans un fichier pdf TeleinfoLight_MyS_Uno_Shield_RS485_v0.pdf
A+

c'est Noel et plein de p'tite luciole partout, en image la suite de mes bidouilles.

Mis en Com sur le bus entre deux Node , du NodeToNode) Linky ---> Oled
une remonter de la valeur PAPP sur l'afficheur


la gestion des 3Leds avec l'envoie des seuils avec MyController

... bon d'accord la video c pas du spielberg.
les croquis a mettre au propre et je post la suite , un zip .
A+

Bonjour MicroQuettas,

C'est un beau projet que tu partages. J'avais déjà consulté il y a quelques temps ton post de 2018, et je vois que ça continue, c'est top !!

De mon côté, Je souhaiterais utiliser ton code avec le matériel proposé par Charles Hallard le Denky D4.

Penses-tu que cela soit compatible ?

Merci,

Bert-dheb.