Volets somfy - telecommande rts

Bonjour dfgh,

Je le ferai car le principe d'arduino, de l'open source, c'est l'échange qui permet à chacun d'évoluer en fonction de son niveau. Je vous remercie encore pour votre excellente participation qui me fait évoluer !

Sur le fait que mon PB soit du au code, je suis septique :
Entre ==>

et ==>

 if (digitalRead(8) == LOW)
    {
       myRTS.sendSomfy(3, UP); // remote 0, up
      delay(1000);
    }

Je ne vois pas de différence notoire qui pourrait changer le fonctionnement de mon proto...

J'espère que la pro mini me sera utile.
Mais mes connaissances sont limitées, du coup je me trompe peut-être !

hello
oui, pas de différence. attendons que vous ayez fait le hard puis les essais

suggestion: changer le titre du post car il n'est plus adapter et les gars qui chercheront "volets" " somfy" "telecommande rts " ne trouverons pas ce post.

nota: je trouve qu'il n'est pas partique pour séléctionner le volet 7 d'appuuer 7 fois sur le BP
je regarde pour faire une selection avec un BP par canal

C'est fait.

hello
je viens de voir que la télécommande SMOOVE ORIGIN RS100 io est en 868/870MHz
le solution pour moi, serait de rajouter un émetteur RFM69 en 870MHz.
nota: vu les problèmes de paperasse douane/poste pour les commandes en chine, ca va attendre.............
re nota: un point sur mes volets
les 6 volets de la verranda sont en 434MHz
le volet de la baie vitrée du garage est en 870MHz
j'ai 2 télécommandes 4 canaux Telis 4 rts pure pour la verranda
j'a 2 télécommandes pour le volet de la baie vitrée.
1 ref SMOOVE Origin RS100 io est en 870MHz
1 ref Situo 5 io/RTS est en 870 et 434 MHz
donc avec cette télécommande qui émets sur les deux longueurs d'onde, je peux commander les 7 volets.
j'en arrive à ce que je voulais, mais je veux aussi n'avoir qu'une télécommande avec 8 canaux.
je vais donc continuer

Bonsoir dfgh,
j'ai reçu ma pro mini cet AM.
J'ai eu quelques soucis pour utiliser ma nouvelle carte avec mon module USB vers série FDTI FT232-AZ ==> le téléversement générait des erreurs car les noms des connexions du FT232 n'étaient pas corrects...
J'ai eu des soucis d'appairage pour ma télécommande qui gère tous les volets, en effet, ma maison étant grande, il a fallu que je me place au bon endroit pour appairer l'ensemble des volets avec cette télécommande ==> du coup j'ai fait 4 essais infructueux (sur ces 4 essais tous les volets n'étaient pas appairés) ==> dés lors j'ai 12 télécommandes numérotées de 4 à 15 et enregistrées correctement ds l'eeprom... (je m'étais planté c'est pas 10 volets mais 12 :grinning:).

J'ai effectué l'appairage pièce par pièce... Je n'ai pas utilisé votre code.
Pour le démarrage des volets au nombre 4 au lieu de 0, ça devrait se corriger dans le code...

Tout à l'air de fonctionner correctement mais je doit souder et revoir le programme...
Pas besoin d'un reset de la carte.

Je verrai tout ça demain.

Tous mes volets fonctionnent en 434 MHz et plus précisément en 433,42 MHZ.

Je vous souhaite une excellente soirée.
Je vous tiens au courant.
J'espère terminer demain...
Merci encore pour votre aide :wink:

EDIT : Finalement vous avez mis quoi comme résistances ?

Hello
cool si vous n'avez plus besoin du reset.
pour les résistances, je suis resté en 220 ohms, mais j'en suis à tester un proto pour avoir 12 canaux. sur une seule entrée analogique.
cela permettra de sélectionner directement le volet désiré. sans etre obligé d'appuyer 11 fois sur le BP pour sélectionner le volet 11 (par exemple).

Vous voulez faire ça :
http://modelleisenbahn.triskell.org/spip.php?article59


Le PB c'est qu'il faut des résistance précises sinon les valeurs fluctuent...
Je vais voir si j'ai de bonnes résistances, je me rappelle plus comment on vérifie leur pourcentage de fiabilité mais j'ai trouvé dans mes tiroirs des résistances de la marque ELEGOO à 5 couleurs ça ferait peut-être l'affaire...

En plus on est en 3.3V et pas en 5...

hello
oui, résistances à 1%
voici les valeurs relevées au multimetre pour chaque appui sur un BP
0 0,302 0,646 0,971 1,271 1,592 1,971 2,255 2,582 2,902 3,215 3,3

le bout de code fait bien le tri.
voici les valeurs des résistances

5 volts
3300
330
470
560
680
1000
1800
2200
4700
12000
47000
GND
je regarde l'effet d'une pile qui faiblira. telle que j'imagine la chose, je dois pouvoir compenser la chute de la pile.

J'ai un 900 Mhz que j'ai commandé par erreur :


Si vous le voulez, envoyez moi votre adresse en MP et je vous l'expédie. Je n'en aurai pas l'utilité...
Il vous faudra modifier la librairie d'etimou si vous souhaitez rajouter un tel émetteur.

Je vais faire des tests pour avoir plusieurs boutons poussoir sur une entrée analogique. Avec 12 télécommandes enregistrées c'est ce qu'il y a de mieux pour moi. Par contre pour plus de réussite, j'envisage deux * 6 sur deux entrées.

PS : si vous êtes intéressé par le module, faites moi signe avant jeudi car je pars m'occuper de mon vieux papa pendant une semaine ce vendredi.

Bonne journée.

Hello
merci pour votre offre
nota: qu'entendez vous par "modifier la lib d'Etimou". c'est le timing qui est à revoir? ( division par 2 pour passer de 434 à son double 870 ?)
je n'ai pas de connaissances particulière en émission/réception
pouvez vous guidez mes recherches
je vais déjà regarder la lib .

attention, faites le compte des entrées sorties du mini pro
il vous faut les
4, SPI,
1, la sortie vers le RFM69
3, BP pour les mouvements volet,
2, entrées analogiques pour les BP de sélection des volets
12, leds témoins de sélection volet

ce qui fait 22
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21.
ce qui fait juste le compte,
je n'ai jamais essayé dans ces conditions, mais je pense que dans le setup, si vous déclarer 0 et 1 en pinMode OUTPUT), et que vous ne faites pas Serial.begin(115200), vous pourrez utiliser D0 et D1 en sorties pour les leds par exemple
et donc pas de Serial.print dans le code

edit: j'ai trouvé cela dans la lib d'Etimou
if (_transmitterType == TSR_RFM69)
{

radio.initialize();
radio.transmitBegin();
//radio.setFrequencyMHz(868.88);
radio.setFrequencyMHz(433.42);
radio.setPowerLevel(20);

}
}
je tenterai avec cette seule modif en 1er

Bonjour,

Hier, lorsque j'ai procédé à l'appairage de tous mes volets avec la pro mini, tout semblait parfait, cette procédure fonctionnait mieux que sur la UNO R3 (sur laquelle il y avait parfois des dysfonctionnements). Ce matin, je me suis aperçu qu'il fallait quand même effectuer un reset, c'est peut-être du à la configuration matériel de mes volets...
Malheureusement, le watchdog n'est pas fonctionnel sur la pro mini. Du coup je voudrai faire un reset matériel avec le GPIO RST mais je ne suis pas sûr de mon coup !
Quelqu'un peut-il m'expliquer comment faire sur une pro mini 3.3v ?

Oui, j'ai vu ce bout de code dans la libraire mais je ne sais pas si c'est suffisant, j'ai compris dans les principes comment fonctionne la librairie mais ma compréhension reste généraliste car il y a bien des détails tant sur le fond (constitution de la trame, son envoie...) que sur la forme (codage) qui m'échappent.

Bonsoir,

l'instruction : asm volatile (" jmp 0"); fonctionne parfaitement.
Merci à dfgh et à etimou pour sa librairie.
J'ai fabriqué une télécommande qui commande tous mes volets roulants + deux autres (les plus utilisées). Elle fonctionne parfaitement et ça me convient :grinning:

Bonsoir dfgh,

Je vous livre quelques infos sur la trame gérée par la télécommande émulée sur la pro mini.

Je comprends qu'elle présente les caractéristiques suivantes :

  • elle est stockée dans l'eeprom de l'arduino ;
  • elle est constituée de 56 bits donc 7 octets :
  • le premier octet c'est la clé random pour le cryptage (peut-être un code manchester) ;
  • les 4 premiers bits du deuxième octet contiennent la commande (UP-DOWN-STOP) ;
  • les 4 derniers bits du deuxième octet , je ne sais pas (etimou appelle ça le checksum);
  • le troisième et le quatrième octet contiennent le rolling code ;
  • le 5ème, le sixième et le septième octet contiennent la fameuse adresse qui permet d'émuler une télécommande sur la pro mini...

Cette trame est gérée dans la librairie d'etimou ici :

void SomfyRTS::buildFrameSomfy() {
  uint16_t Code;
  EEPROM.get(_EEPROM_address + 2 * _virtualRemoteNumber, Code);
  frame[0] = 0xA7; // Encryption key. Doesn't matter much
  frame[1] = _actionCommand << 4;  // Which button did  you press? The 4 LSB will be the checksum
  frame[2] = Code >> 8;    // Rolling code (big endian)
  frame[3] = Code;         // Rolling code
  frame[4] = _RTS_address + _virtualRemoteNumber >> 16; // Remote address
  frame[5] = _RTS_address + _virtualRemoteNumber >>  8; // Remote address
  frame[6] = _RTS_address + _virtualRemoteNumber;     // Remote address

  //Serial.print("Frame         : ");
  for (byte i = 0; i < 7; i++) {
    if (frame[i] >> 4 == 0) { //  Displays leading zero in case the most significant
      //Serial.print("0");     // nibble is a 0.
    }
    //Serial.print(frame[i],HEX); Serial.print(" ");
  }

  // Checksum calculation: a XOR of all the nibbles
  byte checksum = 0;
  for (byte i = 0; i < 7; i++) {
    checksum = checksum ^ frame[i] ^ (frame[i] >> 4);
  }
  checksum &= 0b1111; // We keep the last 4 bits only


  //Checksum integration
  frame[1] |= checksum; //  If a XOR of all the nibbles is equal to 0, the blinds will
  // consider the checksum ok.

  //Serial.println(""); Serial.print("With checksum : ");
  for (byte i = 0; i < 7; i++) {
    if (frame[i] >> 4 == 0) {
      //Serial.print("0");
    }
    //Serial.print(frame[i],HEX); Serial.print(" ");
  }


  // Obfuscation: a XOR of all the bytes
  for (byte i = 1; i < 7; i++) {
    frame[i] ^= frame[i - 1];
  }

  //Serial.println(""); Serial.print("Obfuscated    : ");
  for (byte i = 0; i < 7; i++) {
    if (frame[i] >> 4 == 0) {
      //Serial.print("0");
    }
    //Serial.print(frame[i],HEX); Serial.print(" ");
  }
  //Serial.println("");
  //Serial.print("Rolling Code  : "); Serial.println(code);
  EEPROM.put(_EEPROM_address + 2 * _virtualRemoteNumber, ++Code); //  We store the value of the rolling code in the
  // EEPROM. It should take up to 2 adresses but the
  // Arduino function takes care of it.
  #ifdef ESP8266
  EEPROM.commit();
  #endif
}

On voit bien dans ce bout de code les détails de cette trame :

EEPROM.get(_EEPROM_address + 2 * _virtualRemoteNumber, Code);
  frame[0] = 0xA7; // Encryption key. Doesn't matter much
  frame[1] = _actionCommand << 4;  // Which button did  you press? The 4 LSB will be the checksum
  frame[2] = Code >> 8;    // Rolling code (big endian)
  frame[3] = Code;         // Rolling code
  frame[4] = _RTS_address + _virtualRemoteNumber >> 16; // Remote address
  frame[5] = _RTS_address + _virtualRemoteNumber >>  8; // Remote address
  frame[6] = _RTS_address + _virtualRemoteNumber;     // Remote address

Un tableau frame à 7 éléments gère donc ces 7 octets soit 56 bits.
J'ai également cru comprendre que la transmission de la trame complète selon le protocole RTS est de l’ordre de 140 ms, en incluant la synchronisation hardware, la synchronisation software.

Bonne soirée.
PS : c'est mon analyse, elle est peut-être erronée...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.