Pilotage Chaudière Frisquet ECO Radio System Visio

Projet très intéressant.
J’ai l’impression que le changement de chip s’est produit à l’occasion du lancement de Frisquet Connect.
En effet (c’est mon expérience) lorsque l’installation de Frisquet Connect se fait sur une chaudière dont le numéro de série est inférieur à 165200000000 il faut changer le tableau de bord de la chaudière.
La photo de mon ancien tableau de bord est jointe. C’est bien un chip SX1211 qui est dessus.

Intéressant en effet…

Est-ce que tu pourrais voir les numéros de version de tes deux panneaux de chaudière ? J’ai trouvé un guide de maintenance qui explique comment les trouver.

Pour le coup mes deux panneaux sont en version 19.
Du coup, je parlais du changement de microcontrolleur (HC08 vs STM32) dans les satellites, entre la version 19 et la version 27.

Par ailleurs, j’ai tenté un appairage, mais je pense que le panneau en mode stand-alone réagit pas tout à fait comme il faudrait. J’ai comparé les menus avec celui de ma chaudière et par exemple, ma chaudière ne permet que l’association d’un satellite pour la zone 1, le panneau que j’ai a toutes les options possible.
Bien que l’appairage fasse « quelque chose » (Plein de données circulent sur la radio, la fausse chaudiere me dit « OK terminé » et le satellite reboot)
Ensuite, je n’ai rien de plus que la trame classique que j’ai déjà observé plusieurs fois, à l’exception des 2 premiers octets qui doivent correspondre à un id de chaudière, et du dernier qui ressemble à un CRC mais qui varie de manière illogique :sweat_smile:

Je pense que je vais laisser l’appairage de coté et passer sur le mode « nominal » sur ma chaudière pour essayer d’avoir une communication plus « simple »

L’ancien panneau indique V19.00.00 et le nouveau, après installation de Frisquet Connect, V19.00.02

Bon, un peu d’avancement, j’ai progressé en faisant un truc hyper fastidieux qui consiste à prendre la datasheet du composant et parser chaque bits de configuration… J’ai fait une première implem en scala qui fonctionne en ligne de commande mais c’est pas pratique du coup, j’ai bricolé un protocol decoder pour sigrok en le générant à partir du scala :sweat_smile:

Au final, ca donne ça :

C’est plus facile pour voir ce qu’il se passe.
Par contre, je suis de plus en plus certain que mon panneau de chaudière sans chaudière fait pas ce qu’il faut, puisque le satellite à l’air de repartir dans son cycle « habituel » une fois l’association faite… et ce cycle correspond au cycle que j’avais au moment où je l’ai acheté.

Il n’y a que 2 octets qui ont changé dans le payload, je suis presque certain que c’est les identifiants de réseau et que la chaudière repose pas sur le sync_id pour filtrer.

J’ai reçu le clone chinois, je vais pouvoir tester des choses, mais la première étape consiste à écrire le driver pour arduino car il n’existe pas :smiley:

1 « J'aime »

Bonjour,
Bravo pour la persévérance et le partage.
Vraiment très intéressant.

J’ai aussi une frisquet qui vit sa vie en dehors de mon monde HA et je me suis fait un peu une raison…

Je vais suivre ce fil avec un grand intérêt, même si mes compétences en électronique sont si basses que même si ça aboutit je ne pense pas me lancer dans une telle modif… Trop peur de tout casser. J’ai déjà changé une chaudière complète à cause d’une carte électronique HS, non réparable, et introuvable en rechange.

Je regrette surtout la non réceptivité de Frisquet à ouvrir un peu leur interface au monde domotique. Je leur ai écrit deux fois, même réponse. Ça fait longtemps qu’ils auraient pu proposer une intégration pour se connecter à leur cloud. Même si c’est pas top, au moins c’est relié et c’est mieux que rien…

Bonne continuation!

Bonjour à tous,

Super projet que je regarde par curiosité, ma Frisquet étant pré 2012 (je suis l’auteur du sujet relatif au Pilotage Chaudière Frisquet ECO Radio System via ESPHome).

Pour ceux qui ont le module Frisquet Connect, avez-vous essayé de regarder comment il communique avec les serveurs de chez Frisquet ? (Voir le principe ici : How to man-in-the-middle proxy your IOT devices | Robert Heaton)

Si Frisquet a bien fait son boulot et que le Frisquet Connect vérifie l’authenticité du certificat, il y a peu de chance que cela fonctionne mais cela vaut peut-être le coup d’essayer.

1 « J'aime »

Pour le coup, j’ai pas investi dans un frisquet connect, trop cher et pas utile à mon sens car trop fermé.

Hier, j’ai presque fini le driver basique du sx1211/rfm63, il me manque plus que la gestion des interruptions liées à la réception, mais ça ne saurait tarder.
Après on rentre dans la phase écoute en permanence de ce qui circule sur la radio :ok_hand:

À l’occasion, si des gens ont une frisquet connect, ou une sonde extérieure, ça pourrait valoir le coup de participer à l’écoute !

Je vous tiens au courant de mes avancées

Hello,

Petite update. J’ai des bonnes nouvelles :tada:

D’abord, j’ai réussi à lire des données depuis le RFM63 (le clone chinois du SX1211), j’ai pas mal galéré, mais c’était lié à la lib arduino SPI pour nodemcu dont les valeurs de fréquences pour la CLK qui sont complètement fausses (le diviseur donné pour 125Khz génère un signal à +50Mhz, celui pour 8Mhz génère un signal autour de 1Mhz, il me fallait du 500Khz max.).

Par contre, j’ai lu et relu la doc à la recherche d’un mode « sans validation » de l’identifiant de réseau (dans la doc, le SYNC, sur 4 octets). Je pensais que c’était possible, mais ce n’est pas le cas.
Pour référence, les packets sont envoyés dans les airs avec ce format :

Le preamble a toujours la forme de 0xAA ou 0x55 (ca dépend de l’alignement), et le SYNC correspond à un identifiant de réseau qui est filtré par le chipset s’il est différent.

Donc je suis revenu à la SDR, me disant que si je voulais récupérer de la donnée d’un max de chaudière, c’était pas envisageable de demander de souder dans le thermostat.

Et… J’ai réussi à décoder les trames avec rtl_433 \o/

Je suis passé à l’écriture d’un decoder, le CRC me cause des soucis, mais je suis déjà en train de récupérer des trames:

{"time" : "2023-02-22 15:36:18", "model" : "sx1211", "network_id" : "05f114c8", "size" : 23, "to" : 128, "from" : 8, "payload" : "b3e80117a0290015a02f00040800b400dc002500c635ce", "crc" : 10922, "raw_payload" : "(­û", "mic" : 64127}
{"time" : "2023-02-22 15:36:18", "model" : "sx1211", "network_id" : "05f114c8", "size" : 49, "to" : 8, "from" : 128, "payload" : "b3e881172a050a0000230222164012000300b400dc002500c600c604f6000000000000000004f6000000000000000031b2", "crc" : 10922, "raw_payload" : "(­û", "mic" : 35016}
{"time" : "2023-02-22 15:38:11", "model" : "sx1211", "network_id" : "05dc5829", "size" : 23, "to" : 128, "from" : 8, "payload" : "dd240117a0290015a02f00040800be00be000502241f39", "crc" : 10922, "raw_payload" : "(­û", "mic" : 53384}

Je crois que je capte toutes les chaudières frisquet de mon quartier, j’en suis à 5 :sweat_smile:

Pour référence, j’ai commencé à bosser avec rtl_433 -S all -f 868900000 qui va générer des fichiers .cue, et ensuite, on peut les voir avec sigrok en faisant rtl_433 -W out_.sr g007_868.9M_1000k.cu8

Pour le décodeur flex, j’ai utilisé rtl_433 -X 'n=frisquet,m=FSK_PCM,short=38,long=38,reset=4200,tolerance=3' g009_868.9M_1000k.cu8 .

Je vais bientôt publier un fork de rtl_433, si des gens possèdent un frisquet connect et/ou des sondes extérieures, je suis preneur de trames capturées avec un sdr rtl2832 !

3 « J'aime »

J’ai environ 15h de données, et j’ai fait quelques tests hier soir en modifiant des valeurs sur le thermostat, et je commence à trouver des choses intéressantes


C’est très prometteur ! Je ne m’intéresse qu’au message qui permet de modifier les consignes de chauffe, c’est vraiment long car le satellite n’envoie les consignes qu’au bout de ~30s.
Je ne me suis pas encore intéressé à la réponse de la chaudière, mais elle répond avec beaucoup plus de données (23 en envoi vs 46 en réception).

Je vais voir pour packager correctement rtl_433 pour proposer l’intégration à la communauté :smiley:

2 « J'aime »

Chouette taff en tout cas !

Pour ma pars je découvre bitbench. C’est un outils pour analyser des trames ? En gros tu collectés, tu balances en vrac et il te montre ce qui varie ?

Si oui c’est cool !

C’est ça, tu mets les trames dedans, et tu mets le format, hh pour afficher l’octet en Hexa, bbbbbbbb pour le binaire et d en décimal.
C’est un outil qui vient de rtl_433, j’ai trouvé par hasard, mais c’est hyper pratique !

@mgre super taf !!!
Je ne comprend pas la moitié!
Mais si tu as arrives à trouver une solution pour qu’on puisse envoyer une température de commande et la température sonde extérieure à la petite chaudière via rfx433, je suis preneur, je ne sais pas si c’est vraiment ça que tu cherches,
En tout cas je suis le post au cas où ^^ !!
Bravo

Hello !

Merci !
Je connaissais pas le rfx433, mais si je ne dis pas de bêtises, ce sera plutôt un rfx868 car la chaudière frisquet est autour de 868Mhz.

Ca peut effectivement une solution, mais vu le prix et le fait que j’ai déjà mis plus de 100€ dans les devices d’experimentation (satellite + panneau de chaudière), je vais probablement passer mon tour pour l’intégration :sweat_smile:. J’ai acheté le petit device compatible sx1211, pour 10€, une carte esp8266 qui me restait pour 4€, ca fera l’affaire :stuck_out_tongue:

Après, ca doit pas être compliqué à porter dessus, j’imagine qu’il faut « juste » générer les payloads avec le bon format.

Ceci-dit, @Morinus007, tu as une sonde extérieure ? J’ai regardé les modules sur leboncoin, et c’est beaucoup plus rare et l’investissement est autour de 400€, je suis pas forcement prêt :sweat_smile: Par contre, avec un tuner tnt sdr et rtl_433, on peut récupérer facilement les trames radio pour analyse, je suis preneur de beta-testeur !

De mon coté, une fois le protocole décrypté, j’ai l’intention de l’implémenter pour fonctionner avec un RFplayer2 hxxps://myrfplayer.com/

2 « J'aime »

Merci @mgre , j’aurai du m’en douter, que c’était du 868Mhz pour le retour d’info!
J’ai bien une Zwave qui tourne dans ces fréquences mais je ne pourrai rien en faire!! :smiling_face_with_tear:
@Kitof auras plus de chance avec in RFPLAYER2…
Pour la sonde extérieur, je n’ai pas celle de Frisquet, ça coute aussi un bras!
J’ai une station météo sans fil style oregon scientific, avec 3 sondes, dont une à l’extérieur qui me remonte l’info très fréquemment en 433Mhz… ça me paraissait bien de pouvoir donner la température que j’ai sans acheter une autre sonde Frisquet!
Bon en tout cas, je suis ton post, et te félicite encore pour toutes tes recherches !!!

Bon, plein de nouvelles encore:

Primo, j’ai réussi à me faire passer pour une chaudière auprès du satellite :tada:


J’ai « juste » rejoué une trame réponse de ma chaudière en changeant les valeurs qui avaient l’air de correspondre dans la trame requete. J’ai fait deux trois essais-erreurs, et boum !

Deuxio, je galère un peu sur le CRC du chipset, j’ai utilisé un outil qui s’appelle reveng crc pour trouver les valeurs du CRC. En effet, la documentation ne donne que l’algo, mais pas les valeurs initiales.

./reveng -w 16 -s 178008dd500117a0290015a02f00040800b900be00050352fd49 17800819440117a0290015a02f00040800a800aa002401578f80 \
178008ab340117a0290015a02f00040800b300be002502c1f15b \
178008b3140117a0290015a02f00040800b100dc00250352db11  \
178008dd540117a0290015a02f00040800ba00be00050352f307 \
17800819480117a0290015a02f00040800a900aa002401610a01 \
178008ab380117a0290015a02f00040800b400be002502c6f38d \
178008b3180117a0290015a02f00040800b100dc00250352b064 \
178008dd580117a0290015a02f00040800ba00be000503529872 \
178008194c0117a0290015a02f00040800aa00aa00240171167e \
178008ab3c0117a0290015a02f00040800b600be002502c02564 \
178008b31c0117a0290015a02f00040800b100dc0025035266a8 \
178008dd5c0117a0290015a02f00040800ba00be000503506efc \
17800819500117a0290015a02f00040800ac00aa00240176c79a \
178008ab400117a0290015a02f00040800b800be002502bcc31a \
178008b3200117a0290015a02f00040800b100dc00250352b028 \
178008dd600117a0290015a02f00040800ba00be00050352983e \
17800819540117a0290015a02f00040800ab00aa0024016f8b0a \
178008ab440117a0290015a02f00040800b900be002502b60cfd \
178008b3240117a0290015a02f00040800b100dc0025035266e4 \
178008dd640117a0290015a02f00040800bb00be00050352f693 \
17800819580117a0290015a02f00040800ab00aa0024015a8689 \
178008ab480117a0290015a02f00040800ba00be002502ad1c50 \
178008b3280117a0290015a02f00040800b100dc002503520d91 \
178008dd680117a0290015a02f00040800bb00be000503529de6 \
178008195c0117a0290015a02f00040800aa00aa00240151594f \
178008ab500117a0290015a02f00040800bc00be002502a29a70 \
178008b3300117a0290015a02f00040800b100dc00250352db7b \
178008dd700117a0290015a02f00040800bb00be000503524b0c \
17800819640117a0290015a02f00040800ab00aa00240158704b
width=16  poly=0x1021  init=0x236b  refin=false  refout=false  xorout=0x0000  check=0xe06c  residue=0x0000  name=(none)

J’ai mis ces valeurs dans rtl_433, malheureusement, ca ne fonctionne que sur certaines requetes, pas toutes… Je ne sais pas si ça vient de mon implementation un peu foireuse (je fais pas de C d’habitude, j’aime pas manipuler les tableaux d’octets :sweat_smile:)

Du coup, ca me gêne pas pour emettre avec le device idoine, mais pour les implems à base de RFPLAYER, il faudra cracker ça.

Enfin, j’ai commencé à réfléchir au livrable final que j’allais faire. Je pense faire un programme qui parse et interprète le protocole sur une machine linux x86/ARM qui pilote un transceiver (en USB, sur une liaison série, …) pour envoyer et recevoir des informations. L’idée est de limiter la phase d’implémentation sur le device RF à envoyer et recevoir des trames brutes.
J’ai donc commencé à implementer un parseur avec Kaitai Struct pour laisser la porte ouverte aux implémentations dans tous les langages, je connaissais pas, mais c’est vraiment génial :



2 « J'aime »

Bonjour
Impressionant @mgre !
J’ai Frisquet Connect et une sonde extérieure Frisquet sur mon Hydromotrix Visio. J’ai aussi un dongle compatible RTL-SDR que je commence juste à découvrir…
Je veux bien « beta tester » mais j’aurais besoin de guidance :slight_smile:

Trop bien !!

Ca me donne un objectif pour mettre tout ça en forme ! Tu es plutot sur linux ou windows ? Raspberry pi peut-être ?

Plutôt windows au quotidien. J’ai aussi un Minisforum N40 sur lequel je peux monter linux ou raspbian.
Pour l’instant j’ai essayé de tester un dongle NESDR sur Windows + Universal Radio Hacker mais je rame pour trouver le signal Frisquet

Du coup, j’ai l’impression qu’avec un linux, ce sera plus simple, meme si rtl_433 a l’air de se compiler sur windows.

Donc j’ai poussé mon code sur un repository github, avec un commit qui ajoute le support du SX1211. Son objectif est de capturer des trames brutes, sans les décoder.

Les instructions de build sont assez « simple »:

sudo apt-get install libtool libusb-1.0-0-dev librtlsdr-dev rtl-sdr build-essential cmake pkg-config

Puis

git clone git@github.com:mgrenonville/rtl_433.git 
# ou git clone https://github.com/mgrenonville/rtl_433.git si ça ne fonctionne pas
cd rtl_433/
mkdir build
cd build
cmake ..
make

Ensuite, le binaire généré se trouve dans <REPOSITORY rtl_433>/build/src/rtl_433.

Pour ma part, je lance cette commande:

/path/to/rtl_433/build/src/rtl_433  -R 242 -f 868900000  -F json:dump.json   -F log  -v
  • -R 242 : C’est l’identifiant du decodeur dans mon build de rtl_433
  • -f 868900000: C’est la fréquence de la chaudiere
  • -F json:dump.json : Ca va logguer dans le répertoire courant un fichier dump.json

Ensuite, tu peux apporter ton thermostat et lui faire des changements de configuration ou autre, tu devrais voir des lignes apparaitre dans le fichier.

Tu risques de capter plusieurs identifiants de network_id, et aussi pas mal de données foireuses (comme je n’arrive pas à vérifier le checksum, je peux pas filtrer). L’idée est de trouver ton identifiant de chaudière (ie, le network_id) en prenant un satellite et en soufflant sur la sonde de température en haut à droite, le thermostat va se mettre à émettre comme un petit fou.

Une fois que tu as l’identifiant, tu peux filtrer le fichier avec jq 'select(.network_id == "05da2ee2") dump.json. (sudo apt install jq, un super outil pour manipuler le json)

En info interessante, pour la sonde exterieure, ce serait bien de récupérer:

  • des trames de temperature exterieure.
  • des trames d’association
  • des trames d’initialisation

Dans les données dump, je loggue des adresses, j’ai reperé que :

  • 0x80: La chaudière
  • 0x08: Le satellite Z1
  • 0x09: Le satellite Z2

Je soupçonne que le Z3 sera à 0x10, le reste, c’est la découverte !

1 « J'aime »