Régulation d'une chaudière Frisquet ECO radio System

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre
et {/Quote]

manu_domoticz
Messages : 24
Enregistré le : 02 avr. 2019, 13:51

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par manu_domoticz »

re

éviter du tor tout simplement, et faire des coupures démarrage de la pompe, qui va surement avoir un vieillissement prématuré. Apres n'étant pas familier avec la programmation (mes souvenirs remontent au fortran, aie le dinosaure), je n aimerais pas me lancer dans la galère de gestion d'un PID.
Il faudrait donc comprendre que le module radio de friquet envois bien des informations de Température de consigne à la chaudière.... j avais cru lire que, la chaudière d'elle même avait un minimum de gestion. En gros, le contact se ferme, la chaudière chauffe plein pot .... bonjour l'overshoot de température.

polo9222
Messages : 101
Enregistré le : 05 oct. 2017, 22:04

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par polo9222 »

Tout à fait d'accord avec toi mais avec un contact sec on ne peut pas faire grand chose......

tchuene
Messages : 26
Enregistré le : 03 sept. 2020, 14:17

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par tchuene »

J'ai pu envoyer les premières commandes à ma chaudière via l'arduino et ça semble bien fonctionner, sans défaut, en tout cas sur une dizaine de commandes.
Je dois maintenant valider la relation entre la consigne que j'envoie et la température réelle de départ eau, mais il faut faire l'exercice sur des périodes longues car il y'a une grande latence sur les montées/descentes en température.
Il gèle déjà dans mon Jura donc j'y vais crescendo sur les tests de peur de mettre la chaudière en carafe...

etimou
Messages : 37
Enregistré le : 03 oct. 2020, 10:46

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par etimou »

ça progresse bien! je peux également faire des mesures si tu m'envoies ton code

tchuene
Messages : 26
Enregistré le : 03 sept. 2020, 14:17

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par tchuene »

Ci dessous mon code, le pin de sortie est ERS_pin (3 chez moi).
Les bytes 3,4 et 5 de la variable "message[17]" sont propres à chaque thermostat, j'ai récupéré tes valeurs à partir des trames que tu avais posté et je les ai ajusté dans le code. Le calcul du checksum (variable "message[14]") est également propre à chaque thermostat, je l'ai aussi ajusté en fonction de tes valeurs, normalement ça devrait jouer.

La boucle principale envoie une commande chaque 4 minutes pour ne pas mettre la chaudière en défaut de réception, tu as juste à changer les valeurs de commande(x,y), avec x = 0, 3 ou 4 selon le mode (réduit, confort, hors gel), et y = valeur décimale de 0 à 100 pour le chauffage.

Code : Tout sélectionner

byte ERS_pin = 3;
int long_pulse = 825;
byte message[17] = {0x00, 0x00, 0x00, 0x3F, 0x9F, 0xE7, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x00, 0xFF, 0x00};
byte old_state, num_byte;
byte bitstuff = 0;

void pulse (byte state) {
  digitalWrite(ERS_pin, state);
  delayMicroseconds(long_pulse);
}

void conversion(byte input) {
  for (byte n = 0; n < 8; n++) { // boucle pour chaque bit
    if (bitRead(input, n) == 1) bitstuff++;  // incrémente le compteur bitstuffing
    if ((bitstuff > 5) && (num_byte > 9) && (num_byte < 15)) { // bitstuffing bit 10 à 14
      pulse(!old_state);
      pulse(!old_state);
      old_state = !old_state;
      bitstuff = 0;
    }

    pulse(!old_state);
    if (bitRead(input, n) == 1) {
      old_state = !old_state;
    } else {
      bitstuff = 0;
    }
    pulse(!old_state);
    old_state = !old_state;
  }
}

void commande(byte prechauffage, byte chauffage) {
  if ((chauffage <= 100) and ((prechauffage==0) or (prechauffage==3) or (prechauffage==4))) {
    for (byte x = 0; x < 3; x++) { // boucle de 3 messages
      old_state = 0;
      message[9] = x;  // numero message : 0 à 2
      if (x == 2) {
        message[10] = prechauffage;
      } else {
        message[10] = prechauffage + 0x80;
      }
      message[11] = chauffage;
      message[14] = 0x10B-message[9]-message[10]-message[11]-message[12];
      for (num_byte = 1; num_byte < 17; num_byte++) { // boucle de 16 bytes
        conversion(message[num_byte]);
      }
      digitalWrite(ERS_pin, HIGH);
      delay(33);
    }
    digitalWrite(ERS_pin, LOW);
  } else {
    return;
  }
}

void setup() {
  pinMode(ERS_pin, OUTPUT);
  digitalWrite(ERS_pin, LOW);
}

void loop() {
  commande(0,0);   // reduit 0, confort 3, hors gel 4, chauffage 0 à 100
  delay(240000);  // boucle toutes les 4 minutes
}

etimou
Messages : 37
Enregistré le : 03 oct. 2020, 10:46

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par etimou »

ok merci, j'ai pas le trop le temps car je suis en pleins travaux mais j'essaierai après les vacances

etimou
Messages : 37
Enregistré le : 03 oct. 2020, 10:46

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par etimou »

Dans la notice, il est écrit:

"Je veux arrêter le chauffage pendant l’été ! »Le satellite s’en charge automatiquement. Si vous préferez, vous pouvez passer en commande manuelle (voir page 13) et éteindre tous les voyants lumineux par une action prolongée sur la touche"

Cela va un peu dans le sens où le satellite n'a pas d'influence sur l'eau chaude sanitaire, non?

etimou
Messages : 37
Enregistré le : 03 oct. 2020, 10:46

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par etimou »

@tchuene j'ai essayé ton programme un peu modifié pour pouvoir envoyer des commandes depuis un terminal série: aucune réaction de la chaudière pour le moment... snif
Par exemple, 3,50\n pour envoyer mode confort, chauffage à 50.

Code : Tout sélectionner

byte ERS_pin = 11;
int long_pulse = 825;
byte message[17] = {0x00, 0x00, 0x00, 0x3F, 0x9F, 0xE7, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x00, 0xFF, 0x00};
byte old_state, num_byte;
byte bitstuff = 0;

byte heatingValue = 0;
byte preHeatingValue = 0;
long commandTime = 0;

void pulse (byte state) {
  digitalWrite(ERS_pin, state);
  delayMicroseconds(long_pulse);
}

void conversion(byte input) {
  for (byte n = 0; n < 8; n++) { // boucle pour chaque bit
    if (bitRead(input, n) == 1) bitstuff++;  // incrémente le compteur bitstuffing
    if ((bitstuff > 5) && (num_byte > 9) && (num_byte < 15)) { // bitstuffing bit 10 à 14
      pulse(!old_state);
      pulse(!old_state);
      old_state = !old_state;
      bitstuff = 0;
    }

    pulse(!old_state);
    if (bitRead(input, n) == 1) {
      old_state = !old_state;
    } else {
      bitstuff = 0;
    }
    pulse(!old_state);
    old_state = !old_state;
  }
}

void commande(byte prechauffage, byte chauffage) {
  Serial.print("Nouvelle commande de chauffage : (");
  Serial.print(prechauffage);
  Serial.print(",");
  Serial.print(chauffage);
  Serial.println(")");
   
  if ((chauffage <= 100) and ((prechauffage == 0) or (prechauffage == 3) or (prechauffage == 4))) {
    for (byte x = 0; x < 3; x++) { // boucle de 3 messages
      old_state = 0;
      message[9] = x;  // numero message : 0 à 2
      if (x == 2) {
        message[10] = prechauffage;
      } else {
        message[10] = prechauffage + 0x80;
      }
      message[11] = chauffage;
      message[14] = 0x10B - message[9] - message[10] - message[11] - message[12];
      for (num_byte = 1; num_byte < 17; num_byte++) { // boucle de 16 bytes
        conversion(message[num_byte]);
      }
      digitalWrite(ERS_pin, HIGH);
      delay(33);
    }
    digitalWrite(ERS_pin, LOW);
  } else {
    return;
  }
}

void setup() {
  pinMode(ERS_pin, OUTPUT);
  digitalWrite(ERS_pin, LOW);
  Serial.begin(9600);
}

void loop() {

  while (Serial.available() > 0) {

    // look for the next valid integer in the incoming serial stream:
    int val1 = Serial.parseInt();
    int val2 = Serial.parseInt();
    // do it again:
    // look for the newline. That's the end of your sentence:
    if (Serial.read() == '\n') {
      // constrain the values to 0 - 255 and invert
      // if you're using a common-cathode LED, just use "constrain(color, 0, 255);"
      if ((val2 <= 100) and ((val1 == 0) or (val1 == 3) or (val1 == 4))) {
        preHeatingValue = val1;
        heatingValue = val2;
        commande(preHeatingValue, heatingValue);  // reduit 0, confort 3, hors gel 4, chauffage 0 à 100
        commandTime = millis();
      }
      

    }
  }

  if (millis()-commandTime> 240000){  // boucle toutes les 4 minutes
    
    commande(preHeatingValue, heatingValue);  // reduit 0, confort 3, hors gel 4, chauffage 0 à 100
    commandTime = millis();
    
  }
  
}
EDIT EDIT: J'ai mis le décodeur en face pour vérifier ce que j'envoie pour 3,50:
11111100111110011110011100000000000001000000000000000000110000010100110000000000101111101011010101111111100000001
3F9FE702000833207DADFE1
111111001111100111100111000000000000010000000000100000001100000101001100000000001011111011010101011111111000000001
3F9FE702001833207DABFE1
11111100111110011110011100000000000001000000000001000000110000000100110000000000101111101001010111111111100000001
3F9FE70200233207DA9FF1

tchuene
Messages : 26
Enregistré le : 03 sept. 2020, 14:17

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par tchuene »

J'imagine que tu as volontairement supprimé les deux séries de 00000000 au début de chaque trame ?
Si oui c'est curieux car le format des trames et le checksum sont bien corrects pour chaque ligne.

Est-ce que tu as un analyseur logique ou un oscillo pour vérifier la fréquence des pulses en sortie de l'arduino?
Sinon tu peux bricoler le programme décodeur et enregistrer dans un tableau le temps entre chaque changement d'état (variable "duration"), puis l'afficher pour voir si tu es bien autour des 0.82ms par pulse.

EDIT: je viens de lancer un nouvel essai et ça fonctionne toujours bien chez moi, je vais profiter de l'aprem pour tester différentes commandes sur des périodes longues et essayer d'établir une relation avec la t° de départ.

PS: effectivement je pense de moins en moins que l'eau chaude sanitaire soit pilotée par l'ers, peut être qu'il s'agit du préchauffage de l'eau de chauffage pour ne pas qu'elle ne descende sous un certain seuil?

etimou
Messages : 37
Enregistré le : 03 oct. 2020, 10:46

Re: Régulation d'une chaudière Frisquet ECO radio System

Message par etimou »

tchuene a écrit : 24 oct. 2020, 13:47 J'imagine que tu as volontairement supprimé les deux séries de 00000000 au début de chaque trame ?
euh non, ou ça? j'affiche "sortie" brute
tchuene a écrit : 24 oct. 2020, 13:47 Est-ce que tu as un analyseur logique ou un oscillo pour vérifier la fréquence des pulses en sortie de l'arduino?
oui je vais le faire à l'oscillo
EDIT: ça a l'air bon pulse court à 0.82ms et pulse long à 1.64ms
tchuene a écrit : 24 oct. 2020, 13:47 PS: effectivement je pense de moins en moins que l'eau chaude sanitaire soit pilotée par l'ers, peut être qu'il s'agit du préchauffage de l'eau de chauffage pour ne pas qu'elle ne descende sous un certain seuil?
effectivement ça doit jouer sur les paramètres de régulation
Modifié en dernier par etimou le 24 oct. 2020, 18:35, modifié 1 fois.

Répondre