[Tuto] Régulation d'une chaudière Frisquet ECO radio System
-
manu_domoticz
- Messages : 24
- Inscription : 02 avr. 2019, 13:51
Re: Régulation d'une chaudière Frisquet ECO radio System
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.
é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.
Re: Régulation d'une chaudière Frisquet ECO radio System
Tout à fait d'accord avec toi mais avec un contact sec on ne peut pas faire grand chose......
ZigbeeForDomoticz : 47 devices
Cle : Silicon Labs EZSP
TVBOX X96 Mini
Cle : Silicon Labs EZSP
TVBOX X96 Mini
Re: Régulation d'une chaudière Frisquet ECO radio System
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...
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...
Re: Régulation d'une chaudière Frisquet ECO radio System
ça progresse bien! je peux également faire des mesures si tu m'envoies ton code
Re: Régulation d'une chaudière Frisquet ECO radio System
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.
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
}Re: Régulation d'une chaudière Frisquet ECO radio System
ok merci, j'ai pas le trop le temps car je suis en pleins travaux mais j'essaierai après les vacances
Re: Régulation d'une chaudière Frisquet ECO radio System
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?
"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?
Re: Régulation d'une chaudière Frisquet ECO radio System
@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.
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
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();
}
}11111100111110011110011100000000000001000000000000000000110000010100110000000000101111101011010101111111100000001
3F9FE702000833207DADFE1
111111001111100111100111000000000000010000000000100000001100000101001100000000001011111011010101011111111000000001
3F9FE702001833207DABFE1
11111100111110011110011100000000000001000000000001000000110000000100110000000000101111101001010111111111100000001
3F9FE70200233207DA9FF1
Re: Régulation d'une chaudière Frisquet ECO radio System
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?
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?
Re: Régulation d'une chaudière Frisquet ECO radio System
euh non, ou ça? j'affiche "sortie" brutetchuene 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 ?
oui je vais le faire à l'oscillotchuene 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?
EDIT: ça a l'air bon pulse court à 0.82ms et pulse long à 1.64ms
effectivement ça doit jouer sur les paramètres de régulationtchuene 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?
Dernière modification par etimou le 24 oct. 2020, 18:35, modifié 1 fois.