Bonjour à tous,
Je viens ici partager mon expérience sur un projet qui a aboutis : j'ai récemment domotisé mon poelle à pellet ravelli via un module radio (868) contrôlé par un arduino ^^ (que j'ai nommé la "ravelli gateway" pour être super original).
Ce projet m'a pris pas mal de mon temps, c'est donc avec plaisir que je partage ceci pour les amateurs de domotique ^^ Et puis cela pourrais éventuellement amenée des gens à se pencher sur les aspects du projet que je n'ai pas compris (je ne suis qu'un amateur chipotteur... niveau low+).
Donc voila pour l'histoire, dans un premier temps, la solution que j'envisageai était via un relai piloté par un arduino, connecté directement à la carte mère (il y a dans la doc du poel une petite section pour la mise en place d'un "système domotique avancé" ... qu'ils disent dans la doc... ).
Puis un jour, pouf la télécommande vole à terre, remplacement, blabla avec l'installateur.... et puis hop, j'ouvre et j'ausculte la télécommande et je vois que le module radio est un truc tout fait (ralala qué des feignass).
RTX-868-FSK
Googeler cela et vous trouvez facilement la doc sur internet, et sur ebay nous trouvons ce module pour 20-25 €.
Le principe est simple, on peut mettre le module soit en mode "écoute" soit en mode "émission", et puis envoyé des 0 et des 1 via le 868, la modulation - démodulation est gérée par le module, tout ce qu'on a à faire c'est blablater avec ^^
Donc première phase : mettre le module en mode écoute, et écouter tout ce qui se passe. Là ça prend assez de temps à analyser (pour info je me suis servis d'un "logic analyser" de type salae) donc je vous passe les détails. Alors, le poel et la télécommande parle en "asynchronous serial Inverted" avec un bitrate de 4800b/s.
Dans les images jointes, vous pourrez observer des exemples de trames que s'envoie la télécommande et le poel.
Malheureusement, je n'ai pas réussis a déchiffrer tout ce qui se trame par là... (ahah)... Et j'ai l'impression que certaines valeurs sont "arbitraire"...
Tout d'abord, il y a le burst : émissions de plusieurs 1-0-1-0... puis série de 0 d'au moins 40ms.
Ensuite, ça commence la causette.
Voici ce que j'ai pu déchiffrer :
(en hexa)
premier byte : si c'est la télécommande qui cause, c'est 0xBC. le Poele : 0xCB -> est ce que cela change en fonction du poele ?
deuxieme byte : le nombre de byte qui est à venir !
3eme : télécommande : 0x21. Poele : 0x11 -> est ce que cela change en fonction du poele ?
4ème : tout le temps 0xCC -> valeur integer 204, ressemble étrangement au "champ ID", que l'on peu lire sur la télécommande lorsque le poel est coupé complètement (prise débranchée).
Les byte qui suive, c'est en fonction du type de requête, en générale, 2 ou 3 byte de requête (la télécommande répond avec ces 2-3 même byte pour valider que la réponse est bien en fonction de la question)...
Enfin, il y a les 2 dernier byte qui sont (certainement) un contrôle de redondance (CRC16 ou autre) mais impossible de reproduire ceci ou de le recalculer ! j'ai tourner la formule dans tout les sens, sur une feuille blanche, je me suis cassé la tête, mais impossible de mettre la main sur la bonne formule... Tant pis, je me passe du checksum ^^
J'ai pus voir passé une dizaine de requête différente, je n'ai identifier que 2-3, dont celles qui m'intéressent : le questionnement pour l'état du poelle, et la commande allumé ou éteindre (c'est la même!).
voici quelques requête :
byte hello1[] = {0xBC, 0x07, 0x21, 0xCC, 0x01, 0x00, 0x1E, 0x9A, 0xBC };
byte hello2[] = {0xBC, 0x07, 0x21, 0xCC, 0x01, 0x00, 0x63, 0x35, 0x86 };
byte hello3[] = {0xBC, 0x07, 0x21, 0xCC, 0x01, 0x00, 0x53, 0x03, 0xD5 };
byte hello4[] = {0xBC, 0x07, 0x21, 0xCC, 0x01, 0x00, 0x52, 0x13, 0xF4 };
byte hello5[] = {0xBC, 0x07, 0x21, 0xCC, 0x01, 0x00, 0x12, 0x13, 0xF4 };
byte hello6[] = {0xBC, 0x07, 0x21, 0xCC, 0x10, 0x17, 0x01, 0x97, 0xD5 };
byte hello7[] = {0xBC, 0x07, 0x21, 0xCC, 0x10, 0x07, 0x04, 0xC4, 0x03 }; -> demande de l'état du poel. Réponse sur 4 byte !
byte hello8[] = {0xBC, 0x07, 0x21, 0xCC, 0x10, 0x07, 0x01, 0x94, 0xA6 }; -> demande de l'état du poel. Réponse sur 1 byte -> c'est cette requête que je fais tout le temps !
byte hello9[] = {0xBC, 0x07, 0x21, 0xCC, 0x10, 0x0A, 0x01, 0xE2, 0xFA };
//update de température
byte helloTemp1[] = {0xBC, 0x08, 0x21, 0xCC, 0x11, 0x00, 0x01, 0x17, 0xF4, 0xCF }; //8eme byte pour la temp en ascii : 23 degré
byte helloTemp2[] = {0xBC, 0x08, 0x21, 0xCC, 0x11, 0x00, 0x01, 0x18, 0x05, 0x20 };
byte helloTemp3[] = {0xBC, 0x08, 0x21, 0xCC, 0x11, 0x00, 0x01, 0x19, 0x15, 0x01 };
//la grosse commande : allumé ou éteindre
byte grossecmd[] = {0xBC, 0x06, 0x21, 0xCC, 0x07, 0x01, 0x9B, 0xDA };
Les réponses du poêl à la requête hello8 :
byte reppoel08_on1[] = {0xCB, 0x08, 0x11, 0xCC, 0x10, 0x07, 0x01, 0x03, 0x7A, 0xD2 }; //en cours de démarrage
le 0x03 se transforme en :
if (theresponse[7] == 0x00) {setPoelStatus(1,"Completement%20Arrete"); codePoel=false;}
else if (theresponse[7] == 0x01) {setPoelStatus(1,"OK%20Cleaning"); codePoel=true;}
else if (theresponse[7] == 0x03) {setPoelStatus(1,"OK%20En%20cours%20de%20demarrage"); codePoel=true;}
else if (theresponse[7] == 0x05) {setPoelStatus(1,"OK%20Completement%20Demarre"); codePoel=true;}
else if (theresponse[7] == 0x08) {setPoelStatus(1,"En%20cours%20d%20arret"); codePoel=false;}
else if (theresponse[7] == 0x11) {setPoelStatus(1,"Modula"); codePoel=true;}
else if (theresponse[7] == 0x17) {setPoelStatus(2,"Alarme%2005"); codePoel=false;}
else if (theresponse[7] == 0x18) {setPoelStatus(2,"Alarme%2006"); codePoel=false;}
else if (theresponse[7] == 0x19) {setPoelStatus(2,"Alarme%2007"); codePoel=false;}
else { setPoelStatus(4,"Unknown%20Status%20code%20-%20"); codePoel=false;}
Vous l'aurez compris : je code comme un zanglief ....
Donc voila, je pense qu'il est possible de faire beaucoup de chose via ce module (certainement tout ce que l'on peut faire avec la télécommande de base) mais bon, c'est trop pour moi
J'ai lier le code pour un arduino avec shield ethernet et shield perso sur carte de prototypage... Et j'ai même lié un modèle 3D pour une box arduino "ravelli gateway"
Voila voila, si vous avez des question n'hésitez pas
ciao.
ethernet_remote_pellet.ino (13.5 KB)
ArduinoCasetestOKOK.stl.zip (40.1 KB)