Domotisation Frisquet Prestige Condensation Eco Radio System

Bonsoir Christophe,

Bonne nouvelle, ca fonctionne !!! :star_struck:
Merci beaucoup

J’ai refait le script de l’arduino qui ne fonctionnait pas par contre.
1 - rajout d’un else dans le if(Bit) dans la fonction writeBit. je ne comprends pas comment ca peut fonctionné sans !

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);
}

2 - et refonte du loop(), suppression de tout ce qui est maschinendeck::SerialTerminal term;* et suppression de la fonction ERS_command (je ne comprenais pas le fonctionnement de ton script - je ne suis pas un expert :wink:)

au final, voilà le script qui fonctionne sur mon PC :

#include <SerialTerminal.hpp>

#define TRANSCEIVER_TX_PIN      14    // Set the pin that receives data from your 433.42 Mhz Receiver
#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, 0x3A, 0x2D, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x00, 0xFF, 0x80};
byte old_state, num_byte;
byte bitstuff = 0;

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);
}

void conversion(byte input) {
  for (byte n = 0; n < 8; n++) { // boucle pour chaque bit
    writeBit(bitRead(input, n));
    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;
    }
  }
}

void commande(byte mode, byte temperature) {
  if ((temperature <= 100) and ((mode==0) or (mode==3) or (mode==4))) {
    for (byte x = 0; x < 3; x++) { // boucle de 3 messages
      old_state = 0;
      
      // Message 9 --> numero 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("");
      
      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);
  } else {
    return;
  }
}

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(9600) ;

}

void loop() {

  String chaineCaractere = "" ;
  String mode = "" ;
  String modeTexte = "" ;
  String temperature = "" ;
  char   acquisDonnees = "" ;
  int    nbTerme = 0 ;
  
  while (Serial.available() > 0) {
    acquisDonnees = Serial.read() ;
    delay(80) ;
    
    if ( acquisDonnees != 32 && acquisDonnees != 10 )  chaineCaractere = chaineCaractere + acquisDonnees  ;
    else {
      switch (nbTerme) {
        case 0:
          Serial.println("##### Reception de parametres #####");
          chaineCaractere = "" ;
          nbTerme++ ;
          break;
        case 1 :  // 1ere option  --> remontée du mode
          mode = chaineCaractere ;
          chaineCaractere = "" ;
          nbTerme++ ;
          switch (mode.toInt()) {
            case 0: 
              modeTexte = "Hors Gel" ;
              break ;
            case 3:
              modeTexte = "Confort" ;
              break ;
            case 4:
              modeTexte = "Eco" ;
              break ;            
          }
          break ;  
        case 2 :  // 2nd option  --> remontée de la temperature
          temperature = chaineCaractere.toInt() ;
          chaineCaractere = "" ;
          nbTerme++ ;
          break ;  
       }
    }

    if ( nbTerme == 3 ) { 
      Serial.println("Lancement commande avec parametres : ");
      Serial.println("     Mode            --> " + mode + " - " + modeTexte );
      Serial.println("     Temperature eau --> " + temperature + "°C"); 
      commande(mode.toInt(),temperature.toInt()) ;
      Serial.println("##### Commandes envoyées #####");
      Serial.println("");
    }
  }     
}

Reste plus qu’à le faire fonctionner sur Jeedom … mais j’ai un pb d’alimentation. HUB USB alimenté en attente de livraison.

Merci pour ton travail !!!