# Automatiser ses volets roulants ## Mat&eacute;riel La maison dans laquelle je vis poss&egrave;de des volets roulants &eacute;lectriques, avec des t&eacute;l&eacute;commandes (une par volet). Aucune des t&eacute;l&eacute;commandes ne permet de fermer ou d'ouvrir tout les volets en m&ecirc;me temps, celles-ci restent donc la plupart du temps accroch&eacute;es &agrave; leur volet. <br/> J'ai vu ce type de volets et t&eacute;l&eacute;commandes chez des amis aussi mais sans syst&egrave;me centralis&eacute;, enfin a moins de disposer l'ensemble des t&eacute;l&eacute;commandes dans un tiroir unique mais ce n'est pas l'id&eacute;al. <br/><br/> Mes volets / t&eacute;l&eacute;commandes sont de marque Somfy, et apr&egrave;s quelques recherches sur Internet j'ai trouv&eacute; que celles-ci pouvaient s'interfacer avec le boitier [RFXtrx433E](http://www.rfxcom.com/RFXtrx433E-USB-43392MHz-Transceiver/en) de chez RFXCOM. J'en ai donc achet&eacute; un (environ 110&euro;, chez [Domadoo](http://www.domadoo.fr/fr/interface-domotique/2561-rfxcom-interface-rfxtrx433e-usb-avec-recepteur-et-emetteur-43392mhz-compatible-somfy-rts.html)). <br/><br/> J'ai &eacute;galement &agrave; la maison un [raspberry pi](https://www.raspberrypi.org/) (vieux) et une [cubieboard2](http://cubieboard.org), sur laquelle j'ai branch&eacute; le boitier RFXtrx433E pour automatiser la gestion des volets. ## Prise en main Le boitier RFXtrx433E viens avec peu de [softs](http://www.rfxcom.com/epages/78165469.sf/en_GB/?ObjectPath=/Shops/78165469/Categories/Downloads) (un sous Windows pour les firmwares, un autre sous Windows aussi pour le contr&ocirc;le) mais cela permet de tester la bestiole.<br/> Il est par contre &agrave; priori bien support&eacute; par les diff&eacute;rentes solutions / distributions domotiques, mais je n'ai pas test&eacute; cela. Pour appairer ses volets et tester une premi&egrave;re fois, le soft fourni [RFXmngr](http://www.rfxcom.com/WebRoot/StoreNL2/Shops/78165469/MediaGallery/Downloads/RFXmngrSetup.exe) est tr&egrave; simple d'utilisation. On trouve assez facilement des tutos &agrave; ce sujet : <br/> ex: http://blog.domadoo.fr/2014/06/06/appairer-volet-roulant-somfy-rfxcom-rfxtrx433e/ N'oubliez pas non plus de mettre le firmware de votre RFXtrx433E &agrave; jour ! ## Contr&ocirc;le sous Linux Une fois que votre volet monte et descend en utilisant RFXmngr, voyons comment le faire fonctionner sous Linux, **en command-line**. Ma CubieBoard &eacute;tant headless, un soft graphique ne me servira a rien. Le soft qui m'a paru le plus abouti (&agrave; ce jour) est [RFXcmd](https://github.com/ssjoholm/rfxcmd_gc), une lib Python, test&eacute;e sur un Raspberry Pi et Debian, parfait donc.<br/> Cette lib permet de g&eacute;rer quasiment tout les protocoles pris en compte par le bo&icirc;tier RFXtrx433E. L'impl&eacute;mentation du protocole Somfy RTS souffre par contre d'un bug, il faudra donc int&eacute;grer un petit patch avant de pouvoir utiliser RFXcmd. ```markdown $ git clone https://github.com/ssjoholm/rfxcmd_gc $ wget https://www.warcow.org/domotique/rfxcmd.py.patch $ patch -p0 rfxcmd_gc/rfxcmd.py < rfxcmd.py.patch ``` La librairie RFXcmd est un peu avare en documentation et en exemples, mais on s'en sort quand m&ecirc;me en lisant le code... Voici comment d&eacute;composer une commande Somfy RTS envoy&eacute;e &agrave; RFXcmd : ```markdown $ cd rfxcmd_gc/ $ sudo ./rfxcmd.py -d /dev/ttyUSB0 -s "0D1A00200104050103A100000000" -v ``` Cette commande permet d'envoyer la valeur *0D1A00200104050103A100000000* au boitier, et c'est cette valeur que nous allons d&eacute;composer : ```markdown "0D1A00200104050103A100000000" 0D : longueur de la chaine (14 octets) 1A : type de trame (RTS) 00 : subtype RTS 20 : sequence number 010405 : code volet (defini lors de l'appairage) 01 : unitcode 03 : ordre (monter / descendre / stop) A1 : signal level 00000000 : padding ``` La partie qui nous int&eacute;resse est donc le **code volet** et la **commande**. Pour les volets Somfy de ma maison, 3 commandes me sont utiles : ```markdown 00 : stop 01 : up 03 : down ``` En modifiant la chaine envoy&eacute;e a votre volet avec le code de celui-ci, et un ordre, votre volet devrait se mettre en mouvement. Le *-v* permet d'avoir du debug. ```markdown $ sudo ./rfxcmd.py -d /dev/ttyUSB0 -s "0D1A00200104050101A100000000" -v RFXCMD Version 0.3 (739) ------------------------------------------------ Send = 0D 1A 00 20 01 04 05 01 01 A1 00 00 00 00 Date/Time = 2016-01-25 13:24:25 Packet Length = 0D Packettype = RTS RTS packet Subtype = RTS Seqnbr = 20 Id1-3 = 010405 Unitcode = 01 Command = 01 / Up Signal level = 10 ------------------------------------------------ Received = 04 02 01 20 00 Date/Time = 2016-01-25 13:24:26 Packet Length = 04 Packettype = Receiver/Transmitter Message Subtype = Transmitter response Seqnbr = 20 Message = ACK, transmit OK ``` ## Automatisation Une fois que nos volets peuvent &ecirc;tre controll&eacute;s ind&eacute;pendamment vie RFXcmd, on peut scripter un truc pour monter l'ensemble de nos volets, a heure fixe ou avec un petit random et en fonction de l'horaire du lever du soleil par exemple ...<br/> Voici deux petits scripts rapides pour monter et descendre mes volets : <br/> * up.sh : * ```markdown #!/bin/bash # PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" cd /path/to/rfxcmd_gc STATFILE="volets.status" STATE=$(cat $STATFILE) if [ -f .lock ]; then exit 0 fi trap "[ -f .lock ] && rm -f .lock" EXIT sunrise=$(curl -s http://domogeek.entropialux.com/sun/annecy/sunrise/now) date_now=$(date +%s) date_sunrise=$(date -d $sunrise +%s) function up() { sudo ./rfxcmd.py -d /dev/ttyUSB0 -s "0D1A00200104050101A100000000" sleep 10 sudo ./rfxcmd.py -d /dev/ttyUSB0 -s "0D1A00200104050201A100000000" sleep 10 sudo ./rfxcmd.py -d /dev/ttyUSB0 -s "0D1A00200104050301A100000000" } touch .lock if [ $date_now -gt $date_sunrise ] && [[ "$STATE" == "down" ]]; then sleep $(((RANDOM%30)*60)) logger -t "domotique" "Ouverture des volets" up echo "up" > $STATFILE fi rm -f .lock ``` <br/> * down.sh : * ```markdown #!/bin/bash # PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" cd /path/to/rfxcmd_gc STATFILE="volets.status" STATE=$(cat $STATFILE) if [ -f .lock ]; then exit 0 fi trap "[ -f .lock ] && rm -f .lock" EXIT sunset=$(curl -s http://domogeek.entropialux.com/sun/annecy/sunset/now) date_now=$(date +%s) date_sunset=$(date -d $sunset +%s) function down() { sudo ./rfxcmd.py -d /dev/ttyUSB0 -s "0D1A00200104050103A100000000" sleep 10 sudo ./rfxcmd.py -d /dev/ttyUSB0 -s "0D1A00200104050203A100000000" sleep 10 sudo ./rfxcmd.py -d /dev/ttyUSB0 -s "0D1A00200104050303A100000000" } touch .lock if [ $date_now -gt $date_sunset ] && [[ "$STATE" == "up" ]]; then sleep $(((RANDOM%30)*60)) logger -t "domotique" "Descente des volets" down echo "down" > $STATFILE fi rm -f .lock ``` Et une petite t&agrave;che cron pour lancer ces commandes toutes les 5 minutes : ```markdown # volets */5 7-9 * * * user /path/to/rfxcmd_gc/up.sh */5 17-22 * * * user /path/to/rfxcmd_gc/down.sh ``` Mes volets s'ouvrent donc le matin dans un d&eacute;lais de 30 minutes apr&egrave;s le lever du soleil, mais pas avant 7h. Ils se ferment le soir maximum 30 minutes apr&egrave;s le coucher du soleil.<br/> ## Fin On pourra bien &eacute;videment am&eacute;liorer le syst&egrave;me, les heures d'ouverture en semaine et le week-end par exemple etc...