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

Vous avez créé 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.
ParkerLewis
Messages : 27
Inscription : 26 oct. 2021, 23:50

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

Message par ParkerLewis »

Re tous.

Merci beaucoup encore à tous pour les contributions.

Grâce au script de @ChristopheHD, j'ai réussi à commander la chaudière avec mon Arduino à chip Aurel :) :) :)

Une commande type "ERS 3 60" a bien déclenché le fonctionnement de la chaudière (après quelques secondes). Je n'ai pas été jusqu'à attendre / vérifier que l'eau monte bien jusque 60° (il fait déjà 25°, ça ira :)) mais je pense que c'est bon sur cet aspect. Ou en tout cas ce n'est plus un problème maintenant normalement.

Une commande "ERS 4 15" a ensuite bien conduit la chaudière à ralentir puis s'arrêter.

Je confirme donc que le "frisquet-ERS-command-transceiver" (en tout cas la version "Latest commit c04f0f4 on 6 Apr")
fonctionne avec le modèle NODO-SHOP :)

Pour info tout de même :

- Comme mentionné par @insosama, il m'a fallu éditer la première ligne, ie remplacer

Code : Tout sélectionner

#include <SerialTerminal.hpp>
par

Code : Tout sélectionner

#include "SerialTerminal.hpp"
Sans ça la compilation plantait ("SerialTerminal.hpp : No such file or directory"). peut-être que si c'est entre crochets faut le mettre ailleurs (dans un répertoire du path windows par ex ?). Ne sais pas. En tout cas en mettant ce fichier (https://github.com/miko007/SerialTermin ... rminal.hpp) dans le même répertoire que le .ino, et avec les guillemets, ça a marché.

D'ailleurs, ce script additionnel est-il nécessaire dans ta version @ChristopheHD ? je ne vois pas où tu y ferais appel d'une quelconque manière, et les messages présents dans le .hpp en question ne sont jamais affichés à la console (contrairement au script @benoit.divers.91 où ils apparaissent bien au lancement). Bref je pense que cette ligne et donc ce fichier sont superflus. Il suffirait que je teste en enlevant la ligne, mais là je ne peux pas pour l'instant (peut-être qu'@insosama pourra confirmer).

- Il y a un warning à la compilation, vraisemblablement sans conséquence, néanmoins le voici :

Code : Tout sélectionner

In function 'void loop()':
116:26: warning: invalid conversion from 'const char*' to 'char' [-fpermissive]
@benoit.divers.91 : je n'ai pas réussi à commander la chaudière Frisquet avec ton script. Quand j'envoie une commande via la console, je n'ai aucun retour. J'ai bien à l'init le message "Mik0 machin machin" qui apparaît, mais les commandes que j'essaie ensuite (que ce soit "eeprom" ou "ERS 3 30" par exemple) semblent sans effet : jamais aucun retour. La diode RX de l'arduino s'allume très brièvement (<0.1s) et c'est tout.
ParkerLewis
Messages : 27
Inscription : 26 oct. 2021, 23:50

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

Message par ParkerLewis »

Proposition de maj du script d'émission pour Arduino avec chip Aurel.

J'ai enrichi les affichages d’infos à la console déjà présents dans la version de @ChristopheHD. L’affichage a désormais lieu que les infos soient valides ou non, et indique si valide ou invalide (et n’envoie bien sûr une trame que si tout est valide).

J’ai aussi rajouté pas mal de commentaires.

Enfin j’ai mis un critère de rejet supplémentaire sur la commande (la température d’eau demandée doit être supérieure à 10°). A voir si c’est pertinent ou s’il conviendrait uniquement de saturer (applicable aussi à la borne max d’ailleurs, par ex avec un x=min(max(10,x),90)).

Voici. (Ca tourne nickel chez moi)

(snip, cf plus bas pour correction)
Dernière modification par ParkerLewis le 30 mai 2022, 23:17, modifié 1 fois.
hakkanicko
Messages : 1
Inscription : 21 mai 2022, 09:51

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

Message par hakkanicko »

Bonjour ParkerLewis

Dans ton script, j'ai l'impression que les valeurs des modes ont changé :
On est passé de

0 => Réduit
3 => Confort
4 => Hors gel

à

0 => Hors gel
3 => Confort
4 => Réduit (ou Eco)

Est-ce que c'est intentionnel ?
ParkerLewis
Messages : 27
Inscription : 26 oct. 2021, 23:50

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

Message par ParkerLewis »

Hello hakkanicko,

Merci pour la remarque. C'est une erreur de ma part. J'ai repris une partie de code ailleurs, et n'ai pas vu que cette partie ne correspondait pas..

N’ayant pas encore tous mes corps de vanne thermostatique, je m’étais contenté de vérifier que la chaudière réagissait en termes de chauffage, mais du coup effectivement je n’avais pas testé les aspects ECS par ex, donc le mode pouvait ne pas être juste…

Par rapport à ce que j’ai posté plus haut, il suffit me semble-t-il modifier la valeur de la variable modeTexte (qui est non fonctionelle et ne sert qu’à l’affichage console) dans la fonction loop().

Le script devient du coup

Code : Tout sélectionner

#define TRANSCEIVER_TX_PIN      14    // Set the pin that emits data towards the 433.42 Mhz Transmitter
#define TRANSCEIVER_MODE_PIN    15    // Aurel transceivers have a pin that let the hardware switch to RX and TX mode
#define TRANSCEIVER_ENABLE_PIN  22    // Aurel transceivers have a pin that must be set to HIGH to enable the transmitter

// Variables
int long_pulse = 825;
byte message[17] = {0x00, 0x00, 0x00, 0x7E, 0x??, 0x?? 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x00, 0xFF, 0x80};
byte old_state, num_byte;
byte bitstuff = 0;

String chaineCaractere = "";
String mode = "";
String temperature = "";
String modeTexte = "" ;
String tempTexte = "" ;
String invalide = "INVALIDE";

// A l'init
// Setup du chip Aurel
void setup() {
  // set the Aurel transceiver to RX mode
  pinMode(TRANSCEIVER_MODE_PIN, OUTPUT);
  digitalWrite(TRANSCEIVER_MODE_PIN, HIGH);

  // enable Aurel transmitter
  pinMode(TRANSCEIVER_ENABLE_PIN, OUTPUT);
  digitalWrite(TRANSCEIVER_ENABLE_PIN, HIGH);

  delay(500);

  // assign an interrupt on pin x on state change
  pinMode(TRANSCEIVER_TX_PIN, OUTPUT);
  digitalWrite(TRANSCEIVER_TX_PIN, LOW);

  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  Serial.begin(57600);
}

// En continu
// Surveillance et émission de trame si commande texte
void loop() {

  if (Serial.available() > 0) {

    Serial.println("##### Réception d'une commande #####");

    // Récup de l'input (ligne de commande)
    chaineCaractere = Serial.readStringUntil('\n');;
    delay(80);

    // Récup des deux infos pertinentes de la commande texte
    mode = getValue(chaineCaractere,' ',1);
    temperature = getValue(chaineCaractere,' ',2);

    // Interprétation & validité
    modeTexte=invalide;
    tempTexte=invalide;
    switch (mode.toInt()) {
      case 0:
        modeTexte="Réduit";break;
      case 3:
        modeTexte="Confort";break;
      case 4:
        modeTexte="Hors Gel";break;
    }
    if (temperature.toInt()>=10 and temperature.toInt()<=100) tempTexte="ok";
    Serial.println("    Mode   --> " + mode + " - " + modeTexte );
    Serial.println("    T° eau --> " + temperature + "°C - " + tempTexte);

    // Action en conséquence
    if (tempTexte==invalide or modeTexte==invalide) {
      // Commande invalide => on signale mais on ne fait rien
      Serial.println("##### Commande invalide ignorée ! #####");
    } else {
      // Commande valide => génération et émission de la trame
      Serial.println("Génération des trames...");
      commande(mode.toInt(), temperature.toInt());
      Serial.println("##### Commande traitée #####");
    }
    Serial.println("");
  }
}

// Génération et émission d'une trame
void commande(byte mode, byte temperature) {

  for (byte x = 0; x < 3; x++) { // boucle de 3 messages

    // Génération de la trame
    // **********************

    old_state = 0;

    // Message 9 --> numéro de message 0 à 2
    message[9] = x;

    // Message : 10 -> mode
    if (x == 2) message[10] = mode;
    else message[10] = mode + 0x80;

    // Message : 11 -> temperature
    message[11] = temperature;

    // Messages 13 et 14 -> checksum
    int checksum = 0;
    for (int i = 4; i <= 12; i++) {
      checksum -= message[i];
    }
    message[13] = highByte(checksum);
    message[14] = lowByte(checksum);

    Serial.print("Trame ");
    Serial.print(x);
    Serial.print(" : ");

    for (int i = 1; i <= 16; i++) {
      if (message[i] <= 0x0F) Serial.print("0");
      Serial.print(message[i], HEX);
    }
    Serial.println("");

    // Emission de la trame
    // ********************
    for (int i = 1; i <= 16; i++) { // boucle de 16 bytes
      conversion(message[i]);
    }
    digitalWrite(TRANSCEIVER_TX_PIN, LOW);
    delay(33);
  }
  digitalWrite(TRANSCEIVER_TX_PIN, LOW);
}

// "Emission"
// Pas complètement boîte aux lettres car il y a un bitstuffing à faire
void conversion(byte input) {
  for (byte n = 0; n < 8; n++) { // boucle pour chaque bit
    // Emission proprement dite du bit
    writeBit(bitRead(input, n));
    // Bitstuffing
    if (num_byte >= 4 && num_byte <= 14) {
      if (bitRead(input, n) == 1) bitstuff++; // incrémente le compteur bitstuffing
    }
    if (bitRead(input, n) == 0) bitstuff = 0;
    if (bitstuff >= 5) {
      writeBit(0);
      bitstuff = 0;
    }
  }
}

// Emission bit à bit bas niveau
void writeBit(bool Bit) {
  old_state = !old_state;
  digitalWrite(TRANSCEIVER_TX_PIN, old_state);
  delayMicroseconds(long_pulse);
  if (Bit) {
    old_state = !old_state;
    digitalWrite(TRANSCEIVER_TX_PIN, old_state);}

  else {
    digitalWrite(TRANSCEIVER_TX_PIN, old_state);
  }
  delayMicroseconds(long_pulse);
}

// Récup du n-ème mot dans un string (n=index)
String getValue(String data, char separator, int index) {
  int found = 0;
  int strIndex[] = {
    0,
    -1
  };
  int maxIndex = data.length() - 1;
  for (int i = 0; i <= maxIndex && found <= index; i++) {
    if (data.charAt(i) == separator || i == maxIndex) {
      found++;
      strIndex[0] = strIndex[1] + 1;
      strIndex[1] = (i == maxIndex) ? i + 1 : i;
    }
  }
  return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}
JuxyJux
Messages : 1
Inscription : 14 sept. 2022, 09:38

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

Message par JuxyJux »

Bonjour à tous.
Pas évident de prendre le fil de la discussion avec le nombre énorme de messages... Est-ce que quelqu'un aurait l'envie de faire une petite synthèse de la solution ou des solutions discutées ?
J'ai moi aussi une chaudière Frisquet Hydromotrix Condensation 25kW avec RIF5000. Je pensais jouer sur la liaison entre le thermostat et la chaudière (on voit passer des petits paquets d'ondes codées en PWM, probablement pour indiquer la température de consigne de départ mais je n'ai pas poussé l'analyse). Mais à la lecture de quelques messages du forum, j'ai l'impression que l'utilisation du contact sec sera plus facile, et que ça permet également un pilotage précis.
Merci d'avance s'il y a un volontaire !
JuxyJux
Polo2292
Messages : 19
Inscription : 25 oct. 2022, 16:48

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

Message par Polo2292 »

Bonjour à tous,
ça faisait très longtemps que je n'étais pas revenu sur la discussion et je vois qu'elle est toujours très active.
Cela fait maintenant 3 ans que mon système est en place et je ne m'en préoccupe plus . Il redémarre chaque fois sans problème.
J'ai eu 2 ou 3 plantages de mon ESP32 , liés au wifi je pense, que j'ai réglés de 2 manières :
- mis une prise commandée qui me permet de arrêter/resetter globalement la chaudière et l'ESP32 de prises de t° et de commande des boutons
- mis un répéteur WIFI à proximité
Depuis plus de soucis.

Je suis admiratif du travail que vous faites sur la radio ; je n'ai pas insisté car c'était un peu compliqué pour moi et j'estime que la précision ultime dans le chauffage est très relative :D :D :D. La commande par pas de 5% environ est suffisante d'après mes résultats. Le mieux est l'ennemi du bien

Par contre j'ai encore affiné la régulation par l'adjonction de têtes thermostatiques pilotées en Zigbee sur les radiateurs ce qui me permet de contrôler le cycle de t° pièce par pièce. Il faut que j'ajuste mon programme pour être sûr d'envoyer de l'eau chaude dans la pièce qui en a besoin .......
Aujourd'hui , je n'arrive pas à relier mes têtes thermostatiques à Domoticz mais je ne désespère pas de le faire prochainement.
Good luck à tous et grossses économies ........
Serveur domoticz : V: 2023.1 sur TVBOX Ubuntu 20.04.5
Python Version: 3.8.10
Plugins : Linky, Z4D plugin stable6-6.3.011, Xiaomi GW
Clé USB Zigbee Sonoff-E ; 40 Objets reconnus dont 5 thermostatics Haozee
10 Espeasy Wifi
Gw Xiaomi
Station Netatmo
cannabarman
Messages : 1
Inscription : 06 déc. 2022, 10:22

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

Message par cannabarman »

Bonjour à tous,

J'ai commandé mon Rflink afin de piloter mes stores Somfy, et je découvre ce matin qu'il pourrait aussi me servir à piloter ma chaudière !

Néanmoins, il y a un firmware différent pour l'Arduino selon l'application :? ...

Aucune chance de merger les 2 fonctions, histoire d'avoir un Rflink pour les gouverner tous ?

Bonne journée, et merci mille fois à tous et pour ce super boulot.
insosama
Messages : 4
Inscription : 05 avr. 2022, 00:05

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

Message par insosama »

bonjour

de retour apres un long moment, j'ai eue beaucoup de truc a géré et j'ai délaissé le projet quelques temps.
ouais, c'est nul.

@christophe, dans mon message précédent (page 47) tu n'a pas compris le point qui était a corriger.
en effet, je me suis pas forcément bien exprimé, et j'ai ajouté un "hello world" a but d'essai qui est resté.
mais la différence est plutot :
pour que ca fonctionne, en plus de devoir récupérer la librairie, j'ai du modifier son appel, de :
#include <SerialTerminal.hpp>
en
#include "SerialTerminal.hpp"
du reste, je te conseil de peut etre donner le lien de la source de cette dépendance :
https://github.com/miko007/SerialTermin ... rminal.hpp
et d'expliquer qu'il faut creer un fichier SerialTerminal.hpp qui contient le code source du lien dans le meme dossier que le .ino du code de l'arduino.

ensuite, je soulignais que je n'arrivais pas a communiquer avec la chaudière :
aucun message apparaissait dans le moniteur série, alors que a la lecture du code, il semblait qu'un certain nombre d'info devait être communiqué.
j'avais donc un probleme.
en investiguant plus, j'ai trouvé un autre probleme.

dans ton code, au dessus du "void loop()" tu initie la communication sériel.
elle est initié a 9600 Bauds.
or, dans ton tuto, tu dis de lancer la commande ERS 3 30 a 57600 bauds.
pour savoir quelle valeur était la bonne, j'ai check ton script jeedom. il est a 57600 bauds. donc il faut changer le code de l'initialisation de la com série en changeant la vitesse ! un autre point a corriger, non ?

ensuite, juste pour compléter la doc, tu pourrais donner le sens des paramètres qui sont passable a la chaudière (3 = confort, 2 = hors gel et 0 = eco, je crois) ca coute pas grand chose mais ca permet d'etre plus clair.

en tout cas, ca y'est, ca marche, de mon côté.
j'espère ne pas me tromper en te donnant ces points à améliorer / modifier.

mais je suis pas sorti encore de mes galère

d'une part, je suis sur une distri PROXMOX; je suis limité en USB, et j'ai bien du mal a m'en sortir de ce probleme aussi. mais dans le doute, pour l'instant, j'ai tout débranché, je n'ai laissé que ma clé Zwave et le Nodo.
dans l'interface de proxmox, pourtant, j'ai 4 periphérique de branché, dont 2 arduino mega. Oo est ce qu'il aurait enregistré un ancien port auquel j'avais branché pour mes essais ? possible. j'y pige pas grand chose.
sur Proxmox, les identifiant sont l'ID vendor et l'ID product. je n'ai trouvé aucune mention qui ressemble a une adresse.
image.png
image.png (66.79 Kio) Consulté 2080 fois
j'ai donc lancé en ligne de commande.
je suis nul sur linux, je tiens a le préciser.

j'ai testé le lsusb -l que tu préconnise : elle ne fonctionne pas. une aide est affiché avec divers paramètre possible : v, s, d, D, t, h; mais pas la lettre l.
(de plus je n'arrive pas a faire marcher certains paramètre)

un des seuls paramètre que j'ai réussi a faire marcher est soit sans paramètre du tout, soit la lettre t
mais je n'obtiens aucune info qui ressemble a ce que tu nous demande de récupérer.
image (1).png
image (1).png (66.88 Kio) Consulté 2080 fois
j'ai essayé le dmesg pour avoir le journal des derniere modif de branchement.
j'ai un peu plus d'info, mais toujours rien qui ressemble a ce que tu demande ...
image (2).png
image (2).png (74.27 Kio) Consulté 2080 fois
le seul truc qui y ressemble vaguement est la mention : TTYACM1

un coup de main pour dépasser ce point bloquant serait d'une aide formidable \o/

ensuite, concernant le plugin thermostat, la loi d'eau, etc ...

est ce qu'un tuto un peu plus complet serait possible ?
je suis en plus dans une configuration un peu spéciale et complexe :
j'ai 18 radiateur chez moi, chacun piloté par un robinet thermostatique indépendant (eurotronic spirit - zwave)
j'ai, dans chaque piece, un capteur de température indépendant. des aqara en grande partie, mais parfois un module de detection d'incendie, ou un netatmo.
en théorie, donc, je dois creer un module "thermostat" par piece.
il faut donc que je créé ... quoi, une règle, un scénario, un script ? j'en ai aucune idée ... pour convertir la somme des consignes et température de la maison en une consigne globale pour la chaudière.

et pour compliquer le tout, en plus, j'ai deux volume indépendant dans la maison qui doivent respecter chacun un planning différent. mais ca, c'est deja a mon sens plus simple a gérer : il faut une consigne qui pilote un groupe de thermostat des radiateurs, tout simplement, pour faire varier les température consigne des pieces.

je vais peut etre avoir besoin d'aide, si c'est possible, pour m'aiguiller un peu sur comment gérer d'une part la chaudière, et de l'autre, les couple robinet / capteurs. ca dépasse largement mon niveau ...

ah, par contre, l'an prochain, je suis en train de bosser dessus, je pourrais contribuer pour vous :
j'ai acheté d'occas une carte electronique de la face avant, et je suis en train de la "hacker" avec un arduino pour avoir le retour d'info des leds, et meme pouvoir agir sur les boutons.
l'idée est d'avoir non seulement une commande, mais aussi un retour : pression, défaut, température, alumage flamme, etc ... pour avoir une alerte en cas de soucis, voir meme automatiser des fonction currative (reboot, réajustement de pression avec des electrovane ...)

de meme, christophe, si tu veux, je peu contribuer en t'aidant à la rédaction d'un tuto.
en tant que parfait ignare de linux et débutant constant sur jeedom, parce que pris par mes travaux, je fait passer trop de temps entre deux passe d'amélioration et je fini par oublier le peu que j'avais compris, j'ai une bonne idée de ce qu'il faut expliquer aux débutant pour les guider pas a pas.

je serais donc ravis de retranscrire vos conseil au propre pour utiliser le thermostat au mieux. si tu veux

d'avance, merci pour votre aide précieuse.
j'espère que mes contribution sur les petit problemes qui persistent pourront compenser un peu l'aide que je vous demande :)

cordialement.
Dernière modification par insosama le 10 déc. 2022, 00:05, modifié 2 fois.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Modération

Message par Keros »

insosama, dans ton précédent message, tu as mis des images hébergées à l'extérieur du forum, il y a de fort risques qu'elles ne soient plus disponibles dans quelque temps comme ici, ou encore . Est-ce que tu peux éditer ton message (petite icône crayon haut à droite du message) et utiliser l'onglet Fichiers joints en dessous de la zone d'écriture des messages pour enregistrer les éléments sur le serveur du forum. Merci
insosama
Messages : 4
Inscription : 05 avr. 2022, 00:05

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

Message par insosama »

voila c'est corrigé :)
Répondre