Personnaliser l’ouverture des volets SOMFY avec Jeedom et les scripts.

J’ai des volets électrique SOMFY avec le module radio. Les volets communiquent via un signal propriétaire nommé RTS. Par chance le RFXCOM RFXtrx433E permet de le décoder et je peux ainsi ouvrir, fermer et stopper mes volets. Cela fonctionne à merveille, en revanche je ne peux pas choisir d’ouvrir mon volet de moitié par exemple, pas automatiquement en tout cas, cela nécessite une action manuelle pour l’ouvrir puis le stopper à la moitié.

Vous le savez peut-être maintenant, mais mon attachement pour les actions manuelles est assez faible… Je me suis donc dis qu’il fallait que j’automatise la possibilité d’ouvrir mes volets en fonction d’un pourcentage d’ouverture.

Principe.

Le principe est assez simple, j’aimerais pouvoir ouvrir mes volets à 30% ou 70%, et via Jeedom évidemment. Nativement je ne peux que donner l’ordre d’ouvrir, fermer ou stopper mes volets, je vais donc faire un script qui jouera avec ces commandes afin de créer l’illusion. En effet, je suis parti du principe que 0% = fermé et 100% ouvert. J’ai ensuite chronométré l’ouverture complète d’un volet : 20 secondes (28s pour la porte fenêtre du salon).

Si je veux ouvrir mon volet à 40%, il suffit alors de faire un bête produit en croix : (40*20)/100 = 8. Mon script devra

  • Fermer complètement le volet.
  • Lancer la commande d’ouverture du volet.
  • Stopper l’ouverture 8 secondes après le début de l’ouverture.

Certes ce n’est probablement pas la manière la plus élégante mais ça fonctionne !

Installation du plugin script.

Dans la suite du TP nous aurons besoin du plugin officiel et gratuit « script », on va donc l’installer. Pour cela rendez vous sur le market Jeedom et installer le tout simplement.

jeedom_script_market

Une fois installé, activez le. Via le menu « Plugins / Programmation » vous avez accès à sa configuration mais nous y reviendrons plus tard.

Création du script.

Le script que j’ai fait permet comme prévu de définir le niveau d’ouverture pour un volet donné.

Usagevolets_jeedom -p PIECE -n NIVEAU)
PIECE = bureau, salon, cuisine, chambre
NIVEAU = de 0 à 100%

Pour fonctionner, le script a besoin de 2 arguments obligatoires : la pièce et le niveau d’ouverture en pourcentage. Exemple :

# volets_jeedom -p salon -n 70 : Ouvre le volet du salon à 70%.
# volets_jeedom -p cuisine -n 30 : Ouvre le volet de la cuisine à 30%.

J’ai créé un fichier « volets_jeedom » dans « /usr/share/nginx/www/jeedom/plugins/script/core/ressources/ ».

Si vous souhaitez utiliser mon script, il vous faudra adapter les éléments suivants :

  • L’adresse du serveur jeedom ($SERVER).
  • L’url de commande ($CMD) en changeant la clé API et le path au besoin.
  • Les noms des pièces.
  • Les ID d’ouverture/fermeture/stop en fonction des pièces.
  • Le temps d’ouverture de vos volets par pièce.

Il faut maintenant changer le propriétaire du fichier et ajouter le droit d’exécution:

Vous pouvez tester le script en cli :

Le script est basique et peut sûrement être amélioré, toujours est-il qu’il fait le boulot 🙂

Utilisation du script dans Jeedom.

Venons en à Jeedom maintenant. Vous pouvez aller dans la configuration du plugin script et en créer un nouveau. Je l’ai appelé « volets »

jeedom_script_commande

  • Définissez un objet parent.
  • Activer le.
  • Rendez le visible sur votre tableau de bord si vous le souhaitez.
  • Le script sera exécuté sur demande, je laisse donc le champs auto-actualisation vide.
  • J’ajoute une commande :
    • Je définis le type de script à « Script »
    • Je définis le type à « Action » et « Curseur »
    • Je donne un nom « bureau_pourcentage » à la commande
    • Dans le champ requête, via le bouton parcourir je choisi mon script volets_jeedom, et je lui ajoute les arguments, -p bureau pour la pièce et pour le pourcentage qui lui sera variable -n #slider#
    • En valeur min/max je définis de 0 à 100.
  • Je rajoute une commande pour chaque pièce que j’adapte.
  • Je sauvegarde le tout.

Tests.

Via le tableau de bord:

Dans l’objetoù vous l’avez placé, vous devriez voir apparaître les commandes du script que vous aviez défini. Vous pouvez alors interagir avec le curseur.

jeedom_dashboard_volets

Via l’API:

Il faut d’abord récupérer l’ID du script et comme à chaque fois qu’on veut récupérer un ID, on va dans « Général / Résumé domotique ». On va dans la configuration avancé (roue dentée) de l’élément qui nous intéresse et on récupère l’ID indiqué.

jeedom_résumédomo_id jeedom_id

Maintenant que vous avez l’id vous pouvez tester via un navigateur avec l’url suivante, que vous aurez bien évidement adaptée en fonction de votre ip et de votre clé. La variable slider à la fin de l’url correspond au pourcentage d’ouverture souhaité :

http:///jeedom/core/api/jeeApi.php?apikey=e880d2cdde3229ae34a9e5e8a1xxxxxxxxxx&type=cmd&id=455&slider=90

Conclusion

Nous avons bricolé un script permettant de simuler un pourcentage d’ouverture de volet, chose nativement impossible avec les volets SOMFY. Nous l’avons intégré à Jeedom grâce au plugin script ce qui nous permet de l’automatiser via l’API ou des scénarios par la suite.

22 commentaires

  1. Bonjour,
    Merci pour le tutoriel. J’ai ajouté un paramètre pour la position actuelle pour déterminer le meilleur chemin. Seul hic si quelqu’un utilise la télécommande entre temps mais d’un autre côté on ne joue pas avec les stores toute la journée.
    Pour identifier le meilleur séquencement des ordres (ouvrir puis fermer ou fermer puis ouvrir) j’ai utilisé la moyenne entre la position actuelle et la nouvelle position sans avoir à se demander où est le store et où il doit arriver.
    Si la moyenne est supérieure à 50 il est préférable d’ouvrir puis fermer et inférieure à 50 il est préférable de fermer puis ouvrir. A 50 peu importe le chemin à parcourir est le même.

    1. Bonjour,

      Votre modif m’intéresse grandement, et étant assez fainéant car ne voulant pas chercher par moi même, serait-il possible d’avoir cette màj du script afin de l’intégrer et ainsi optimiser le fonctionnement de mes volets…

      Par avance merci !!!

  2. Bonjour
    Je débute sur jeedom et je vous remercie pour ce tuto très sympa qui donne une belle idée des possiblités de cette solution.
    J’ai un petit souci. Le script marche bien en ligne de commande shell. Ca marche aussi avec le test avec l’URL.
    En revanche, lorsque je fait un changement de valeur avec les curseurs sur 2 des 3 volets que j’ai, ils font ce qu’on leur demande MAIS à la fin, ils exécutent une fermeture finale… incompréhensible (J’essaie de trouver des logs sous /var/log mais je ne trouve rien qui pourrait m’aider à comprendre
    Le seul indice probable est que les volets qui posent ce problème sont représentés par les 2 premiers sliders (comme si un caractère de retour dans le widget venait perturber le processus)
    Avez vous un début d’aide a me fournir ?
    Je suis sur Jeedom Smart
    Merci

  3. Bonjour, cela fait 1 semaine que je galère. J’ai systématiquement le message : Clé API non valide (ou vide) . Demande venant de :192.168.0.18. Clé API : KDcTwvF4IMRbQ6JH3ILxxxxxxxxxxxxxxxxxxxxxxx.QQ a une idée pour m’aider ?

  4. Bonjour,

    J’aimerai utiliser le script pour piloter une vanne 4 voies, serait-il possible de remplacer la commande par slider par une commande proportionnelle à une température ?

  5. Salut Arnaud, très bon script mit à notre disposition (pour ma part je ne sais pas les écrire alors heureusement que tu es là) fonctionne très bien avec des volets bubendorff. j’ai dû juste rajouter une ligne pour mettre un temps différent sur la montée qui n’était pas exactement le même que la descente : TEMPS_CYCLE_VOLET=28 # Temps d’ouverture complet du volet
    TEMPS_CYCLE_VOLET2=15

    if [[ « $NIVEAU » -ge 0 && « NIVEAU » -le 50 ]];
    then
    #On calcule le temps d’ouverture du volet pour le % souhaité
    TEMPS_ATTENTE=$((($NIVEAU*$TEMPS_CYCLE_VOLET)/100)) # On calcul le temps d’ouverture du volet
    curl -s -i -H « Accept: application/json » « $CMD$ID_FERMER »
    sleep $TEMPS_CYCLE_VOLET
    curl -s -i -H « Accept: application/json » « $CMD$ID_OUVRIR »
    sleep $TEMPS_ATTENTE
    curl -s -i -H « Accept: application/json » « $CMD$ID_STOP »
    elif [[ « $NIVEAU » -ge 51 && « NIVEAU » -le 100 ]];
    then
    TEMPS_ATTENTE=$(($TEMPS_CYCLE_VOLET2-(($NIVEAU*$TEMPS_CYCLE_VOLET2)/100)))
    curl -s -i -H « Accept: application/json » « $CMD$ID_OUVRIR »
    sleep $TEMPS_CYCLE_VOLET
    curl -s -i -H « Accept: application/json » « $CMD$ID_FERMER »
    sleep $TEMPS_ATTENTE
    curl -s -i -H « Accept: application/json » « $CMD$ID_STOP »

    ceci fait cela fonctionne a merveille. maintenant que tout marche j’aimerais perfectionné mon système. j’ai donc créer un virtuel qui reprend monté descente stop position (avec le script) et état. mon état étant un widget dune fenêtre qui se lève descend et reste en position selon la position. malheureusement je ne peux pas lui inclure un retour d’état via le positionnement. donc je n’ais que la fenêtre qui se lève lors de l’ouverture ou se ferme lors de le fermeture avec des retour d’état 0 et 1. serait il possible d’écrire un script en accompagnement avec celui que tu as créer pour faire un retour d’état (de type information numérique) pour le faire fonctionner dans un virtuel avec le widget de la fenêtre???? cordialement Gwen

  6. Bonjour,

    Je cherche un script qui pourrai piloter une vanne mélangeuse 4 voie en sortie de ma chaudiere. Serait-il possible de remplacer la commande par slider par une commande qui serait inversement proportionnel à une température extérieur ? (Je sais pas si je suis clair…) plus la température extérieur monte, plus la vanne se ferme.

  7. Bonjour

    J’essaye de mettre en place ce script qui va remplir les fonctions que je recherche. Je suis confronté a un problème de permission lors de son exécution /
    « Error on shell exec, return value : 126. Details : Array ( [0] => sh: 1: /var/www/html/plugins/script/core/ressources/volets_jeedom.sh: Permission denied ) »

    Je suis sous raspberry pi 3.

    Aurais tu une idée de comment solutionner ce prob ?

    1. Bonjour,
      Oui, c’est assez explicite, tu n’as pas les bons droits sur ton fichier. Connecte toi sur ton raspberry et dit moi quelles sont les permissions sur ton fichier (#ls -l /var/www/html/plugins/script/core/ressources/).
      Sinon tu peux directement tester un chmod 755 /var/www/html/plugins/script/core/ressources/volets_jeedom.sh

      1. Bonjour Arnaud
        Merci pour ton aide, et désolé pour le délais de ma réponse, j’ai été hospitalilsé…

        Voici le résultat de ta comme concernant les droits :
        -rwxrwxr-x 1 www-data www-data 2752 Sep 7 01:12 volets_jeedom.sh

        Qu’en penses tu ?

        Merci encore 😉

  8. presque houraaaa !!!!
    avec ce que tu m’as indiqué , j’ai pu définir le chemin … ( je me suis fier à l’indication de ma configue jeedom en « DIY » mais c’est une erreur d’affichage ) donc je n’est pas besoin de /jeedom/ .
    et ça fonctionne … presque …
    mon volet exécute un stop en trop, car à la fin du cycle de la position voulu le rideau repart pour se caler dans une position dite  » favorite  » que l’on pilote normalement par un double clic sur le bouton stop de la télécommande du volet .

      1. bonjour Philoo ,
        j’ai rajouté deux bloc de commande en plus ,
        position de 0 à 1 , 2 à 50 , 51 à 98 , 98 à 100
        ce qui donne :
        if [[ « $NIVEAU » -ge 0 && « NIVEAU » -le 1 ]];
        then
        #On calcule le temps d’ouverture du volet pour le % souhaité
        TEMPS_ATTENTE=$((($NIVEAU*$TEMPS_CYCLE_VOLET)/100)) # On calcul le temps d’ouverture du volet
        curl -s -i -H « Accept: application/json » « $CMD$ID_FERMER »
        elif [[ « $NIVEAU » -ge 2 && « NIVEAU » -le 50 ]];
        then
        #On calcule le temps d’ouverture du volet pour le % souhaité
        TEMPS_ATTENTE=$((($NIVEAU*$TEMPS_CYCLE_VOLET)/100)) # On calcul le temps d’ouverture du volet
        curl -s -i -H « Accept: application/json » « $CMD$ID_FERMER »
        sleep $TEMPS_CYCLE_VOLET
        curl -s -i -H « Accept: application/json » « $CMD$ID_OUVRIR »
        sleep $TEMPS_ATTENTE
        curl -s -i -H « Accept: application/json » « $CMD$ID_STOP »
        elif [[ « $NIVEAU » -ge 51 && « NIVEAU » -le 98 ]];
        then
        TEMPS_ATTENTE=$(($TEMPS_CYCLE_VOLET-(($NIVEAU*$TEMPS_CYCLE_VOLET)/100)))
        curl -s -i -H « Accept: application/json » « $CMD$ID_OUVRIR »
        sleep $TEMPS_CYCLE_VOLET
        curl -s -i -H « Accept: application/json » « $CMD$ID_FERMER »
        sleep $TEMPS_ATTENTE
        curl -s -i -H « Accept: application/json » « $CMD$ID_STOP »
        elif [[ « $NIVEAU » -ge 99 && « NIVEAU » -le 100 ]];
        then
        TEMPS_ATTENTE=$(($TEMPS_CYCLE_VOLET-(($NIVEAU*$TEMPS_CYCLE_VOLET)/100)))
        curl -s -i -H « Accept: application/json » « $CMD$ID_OUVRIR »
        fi

  9. bonjour Arnaud ,
    super article puisque que c’est exactement ce que je recherchais !!!
    mais j’en suis qu’au début de ma découvert de jeedom et son univers.
    il y à tellement d’info par-ci par-la qu’on ne sait plus ou regarder .
    c’est alors que je suis tombé sur ton blogue 🙂
    mais je voudrai savoir avec quel outil tu écrit tes script et sous quel os ?

    1. Merci 🙂
      Je crée le fichier directement sur le serveur où j’ai installé Jeedom (Raspberry), je fais donc ça en ligne de commande. J’utilise l’éditeur de texte nano.

        1. Path veut littéralement dire « chemin » en anglais, il s’agit donc de l’arborescence d’accès d’un fichier, par exemple « /var/log/apache2/ ». En l’occurrence c’est pour l’utilisation de ma variable $CMD dans le script. Elle pointe vers une URL, il faudra que tu modifies la clé API mais peut-être aussi le chemin car suivant si tu as installé Jeedom depuis l’image officielle ou depuis le script, il est possible que tu n’es pas « /jeedom/ » comme moi dans ton URL.

          1. j’ai une mini+ , indication « Système DIY » dans ma configue , donc je présume que je doit avoir /jeedom/ ?
            j’ai bien modifier la clé API mais pour le chemin, je ne suis sur de rien .

            pour le moment en testant la commande j’ai :
            HTTP/1.1 404 Not Found
            Server: nginx
            Date: Tue, 09 Feb 2016 13:10:17 GMT
            Content-Type: text/html; charset=UTF-8
            Transfer-Encoding: chunked
            Connection: keep-alive

            je retente se soir

          2. C’est tout simple ! Si pour accéder à l’interface de jeedom tu tapes juste http:// alors tu n’en as pas besoin. Si par contre tu dois taper http:///jeedom alors tu en a besoin.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.