[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.
Buglover
Messages : 45
Inscription : 12 déc. 2019, 00:38

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

Message par Buglover »

Bonsoir
le bit stuffing peut faire changer la longueur de trame en fonction du contenu. Il faut peut-être chercher de ce côté là. C'est peut-être un peu plus complexe que prévu.
Oui cependant ce dernier intervient sur les bytes de 4 à 12, alors que je dois insérer un bit dès le début du message donc je ne pense pas que cela vient de là.

Sinon voici la brute des 3 trames (toujours en mode Hors Gel)
11001100110011001100110011001100101010101010110011001011001010101101001011001100110011001100110011001100101100110011001100110011001100110011001100101100110010110011001100110011001100110011001101010101010010101010101101010101001010101010101010110011001100110
num: 0
prechauff: 66
chauffage: 0

11001100110011001100110011001100101010101010110011001011001010101101001011001100110011001100110011001100101100110011001100110011001100110011001100101100110010110011001100110011001100110011001101010101010010101010101101010101001010101010101010110011001100110
num: 0
prechauff: 66
chauffage: 0

11001100110011001100110011001100101010101010110011001011001010101101001011001100110011001100110011001100101100110011001100110011001100110011001100101100110010110011001100110011001100110011001101010101010010101010101101010101001010101010101010110011001100110
num: 1
prechauff: 2
chauffage: 0

Pour faciliter la lecture, la meme chose avec du packing de la trame brute (8 bits pour IN = trame[message]), puis le décodage en binaire (OUT = variable sortie) et HEX (HEX)
IN = 11001100 11001100 11001100 11001100 10101010 10101100 11001011 00101010 11010010 11001100 11001100 11001100 11001100 10110011 00110011 00110011 00110011 00110011 00101100 11001011 00110011 00110011 00110011 00110011 01010101 01001010 10101011 01010101 00101010 10101010 10110011 00110011 0
OUT = 1111 1100 0010 0111 0101 0000 0000 0000 0000 1000 0000 0000 0000 0000 0100 0010 0000 0000 0000 0000 1111 1011 1110 1111 0111 1111 1000 0000 1
HEX = 3FE40A00 10000042 0000DFF7 FE0101
num: 0
prechauff: 66
chauffage: 0

IN = 11001100 11001100 11001100 11001100 10101010 10101100 11001011 00101010 11010010 11001100 11001100 11001100 11001100 10110011 00110011 00110010 11001100 11001100 11010011 00110100 11001100 11001100 11001100 11001100 10101010 10110101 00101010 10101101 00101010 10101010 10110011 00110011 0
OUT = 1111 1100 0010 0111 0101 0000 0000 0000 0000 1000 0000 0001 0000 0000 0100 0010 0000 0000 0000 0000 1111 1011 0111 1101 0111 1111 1000 0000 1
HEX = 3FE40A00 10800042 0000DFBE FE0101
num: 0
prechauff: 66
chauffage: 0

IN = 11001100 11001100 11001100 11001010 10101010 11001100 10110010 10101101 00101100 11001100 11001100 11001100 11001011 00110011 00110011 00110100 11001100 11001101 00110011 00110011 00110011 00110011 00110011 00110101 01010100 10101011 01010101 01001010 10101010 10101011 00110011 00110
OUT = 1111 1100 0010 0111 0101 0000 0000 0000 0000 1000 0000 0000 1000 0000 0100 0000 0000 0000 0000 0000 1111 1011 1011 1110 1111 1111 1000 0000 1
HEX = 3FE40A00 10000102 0000DF7D FF0101
00110
num: 1
prechauff: 2
chauffage: 0
Buglover
Messages : 45
Inscription : 12 déc. 2019, 00:38

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

Message par Buglover »

@tchuene, J'imagine que l'on va tous utiliser ton programme pour lire l'ID (poster le 5 Oct) de notre Frisquet et vérifier si les trames fonctionnent bien. (encore une fois, un grand merci :D ), et j'aimerais si tu le veux bien te proposer deux changements que j'ai du faire pour pour qu'il fonctionne bien avec mon installation. (ici je ne parle pas de mon "1" supplémentaire)

Tout d'abord inclure la gestion du stuffing dans le décodage
Remplacer cette partie

Code : Tout sélectionner

 
 // décodage des bits de la trame: 00=0, 11=0, 10=1, 01=1
for (int x = (intro*4); x <= trame[message].length(); x=x+2) {
	if ((trame[message].substring(x,x+2) == "00") or (trame[message].substring(x,x+2) == "11")) {
		sortie = sortie + "0";
	} else {
		sortie = sortie + "1";
	}
}
Par

Code : Tout sélectionner

int nbBit = 0;
int nbOne = 0;

// décodage des bits de la trame: 00=0, 11=0, 10=1, 01=1
for (int x = (intro*4); x <= trame[message].length(); x=x+2) {
	if ((trame[message].substring(x,x+2) == "00") or (trame[message].substring(x,x+2) == "11")) {
		if (!((nbOne == 5) && (nbBit >= 8*7) && (nbBit <8*12)))     // gestion du Stuffing pour les octets entre 7 et 11 inclu
			sortie = sortie + "0";                                                        
		nbOne = 0;
	} else {
 		sortie = sortie + "1";
		nbOne +	
	}
                nbBit++;
}

Puis je me suis rendu compte sur mon installation que entre les trames 0, 1 et 2, il pouvait y avoir un peu de bruit (ce dernier semble aléatoire chez moi), ce qui avait comme effet d'invalider l'ensemble des trames reçues.
Voici une proposition pour y remédier, en modifiant le else du if (trame[message].length() > 200)

Code : Tout sélectionner

 } else {
        trame[0] = "";
        trame[1] = "";
        trame[2] = "";
        message = 0;
      }
    }
    data_dispo = false;
Par

Code : Tout sélectionner

 } else {
	// Re-initialise la trame s'il n'y avait pas de données juste avant      
        if ((message == 0) || (trame[message-1].length() < 200)) { 
          trame[0] = "";
          trame[1] = "";
          trame[2] = "";
          message = 0;
        }
      }
    }
    data_dispo = false;
tchuene
Messages : 29
Inscription : 03 sept. 2020, 14:17

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

Message par tchuene »

@Buglover: pour moi les 3 trames brutes que tu as posté sont identiques, elles ont en effet quelques particularités:

=> ton premier byte d'id commence par un 0 donc il faut bien ajouter un 0 en début de trame pour tout réordonner
=> tu dois ensuite bitstuffer 2 fois entre les bytes 13 et 14

une fois ces deux manips faites on retrouve un format et des valeurs conformes en supprimant les deux 0 de bitstuffing:
00000000 00000000 01111110 00010011 10101000 00000000 00000100 00000000 00000000 00100001 00000000 00000000 011111(0)11 111(0)11110 11111111 00000000

soit en hexa:
00 00 7E C8 15 00 20 00 00 84 00 00 7E 7F FF 00

A noter que je n'avais pas intégré le bitstuffing dans la partie décodage car je préfère décoder les trames "à la main" pour éviter les erreurs au décodage et justement voir apparaitre les cas particuliers comme toi.

J'ai vu qu'Etimou avait déjà mis une partie du code sur Github, je pense que c'est mieux de tout regrouper donc il peut sans doute mettre à jour le code directement.
etimou
Messages : 55
Inscription : 03 oct. 2020, 10:46

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

Message par etimou »

tchuene a écrit : 10 nov. 2020, 09:41 J'ai vu qu'Etimou avait déjà mis une partie du code sur Github, je pense que c'est mieux de tout regrouper donc il peut sans doute mettre à jour le code directement.
Oui je peux faire ça. J'ai toujours eu un peu de mal avec les contributions multi utilisateurs. Ca m'entrainera.
Pour l'instant je vais mettre le code de décodage initial, le code simple d'envoi de commande et le code pour esp8266 avec communication MQTT.
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message par Greg.O »

Bonjour,

j’ai moi-même une chaudière Frisquet avec une sonde de température extérieure et un satellite Eco Radio Systeme Visio. Je suis vos progrès et suis donc très intéressé par vos avancées.

Je n’ai pas le niveau en programmation pour vous aider, mais si je peux vous aider en quoi que ce soit d’autre, n’hésitez pas à me contacter.
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
etimou
Messages : 55
Inscription : 03 oct. 2020, 10:46

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

Message par etimou »

On aura probablement besoin de testeurs sur différents modèles de chaudières. Si ça ne te fait pas trop peur, tu peux te munir d'un arduino et tester les programmes sur ta chaudière.

Pour info, j'ai mis les codes ici: https://github.com/etimou/frisquet-arduino
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message par Greg.O »

Ça tombe bien, j'ai un arduino qui ne fait rien dans un placard.

Je vais étudier ça
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
Today2000
Messages : 13
Inscription : 22 juin 2020, 10:19

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

Message par Today2000 »

Hello tout le monde,

Je continu ma quete de commande de la chaudiere en envoyant un signal radio.
Avantage : pas de modification du recepteur, on reduit le risque a tous les niveaux, possibilité d'alterner avec la télécommande
Voici l'avancement dans mes travaux. J'ai besoin d'un peu d'aide ;-)

Rflink :
La gateway Rflink recoit très bien les trames, mais impossible d’émettre avec, la trame n'est pas formatée correctement, c'est sur maintenant. Impossible facilement de corriger cela. => abandon

Rpitx :
Freq d’émission de la télécommande 433,390Mhz
Freq d'emission avec Rpitx 433,415Mhz (pour arriver a la meme frequence que la télécommande quand j'ecoute avec un SDR)

Avec
Capture du signal dans un fichier IQ
Emision du signal dans un fichier IQ

Fonctionne! mais j'ai besoin de faire mieux ;-)
-Il faut que j'enregistre un fichier par trame (fichier IQ) en jouant avec la télécommande qui va decider de la température de chauffe
Par exemple j'aurais une trame 32°C, 56°C, 63°C

-On fait une photocopie de la trame, bruit, erreur, interference, tout est réémis

-J'enregistre 5 secondes, ce qui est trop long, et je ne peux retravailler la trame après (découper, améliorer le signal...)
Rpitx en version V2 est mieux, mais a deprecié pas mal de fonctionnalité. Je n'arrive pas à modifier mon fichier IQ :-( help!

Piste:
J'ai utilisé le très bon logiciel Universal Radio Hacker pour capturer / analyser / et Générer des trame !( bien formaté avec de belles courbes)
Capture.PNG
Capture.PNG (13.62 Kio) Consulté 4092 fois
Capture2.PNG
Capture2.PNG (24.37 Kio) Consulté 4092 fois
La trame décodée mais manque implementation bitstuffing, impossible dans notre cas de figure octet 10 à 14 seulement
Il faut dans ce cas utiliser un bout de script (vbs, bat, c, cpp...) pour la transformation: decoder et un pour encoder avec un parametre
encode.cpp 1010101010 => 111111XXXX
C'est bete mais je n'y arrive pas en reprenant votre travail, si quelq'un peut m'ecrire ces 4 lignes de codes ;-) )

Bref, j'arrive a créer un beau signal mais je n'arrive pas a envoyer cette trame avec RPITX
Voici les formats de sorties:
capture3.png
capture3.png (12.22 Kio) Consulté 4092 fois
Quel format, quels parametres choisir??? pour l'export et pour la transmission Rpitx

Si je n'arrive pas a aller plus loin, je reste avec mes trames moches mais qui fonctionne ;-)

Merci bien à vous tous

En tout cas grand bravo a @tchuene,@etimou et @buglover pour bien faire avancer ce projet
etimou
Messages : 55
Inscription : 03 oct. 2020, 10:46

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

Message par etimou »

Si tu veux rester sur l'émission radio, tu dois aussi pouvoir utiliser exactement le même code que pour l'envoi direct en filaire.
Il te faut simplement un arduino et un petit émetteur 433 à quelques euros. Théoriquement ça marche.
Buglover
Messages : 45
Inscription : 12 déc. 2019, 00:38

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

Message par Buglover »

Bonjour

@today2000, merci d’avoir partager tes travaux avec cet outil Universal Radio Hacker. En regardant quelque vidéos sur ce dernier il semble être très puissant et un indispensable pour tout reverser en herbe :D

Pour répondre à ta question d’ajouter un décoder/encode externe, j’ai trouvé cette page https://github.com/jopohl/urh/wiki/Dec ... al-program
qui explique l’interface de ce dernier, avec un programme d’exemple qui est assez simple.

En gros de ce que je comprends URH passe en paramètre le message à traiter, et lit la sortie standard le message traité. L’exemple fourni utilise un premier argument pour indiquer s’il s’agit d’une opération de décodage ou d’encodage, le 2ème argument étant le message à traiter


J’espere que cela devrait t’aider.
Dernière modification par Buglover le 15 nov. 2020, 09:45, modifié 1 fois.
Répondre