Les GPIO dans Domoticz

Traduction libre de l‘article du wiki anglophone , retrouvez ici tout sur la gestion des GPIO Raspberry dans Domoticz

Introduction

C’est quoi un GPIO ?

Il s’agit de tous les connecteurs situés sur le coté du Raspberry auxquels on pourra relier divers équipements tels que Leds, contacteurs on/off. On peut connaitre l’état de chaque GPIO (le GPIO 5 est à on par exemple) et/ou changer d’état un GPIO (passer le GPIO X à off pour enclencher une commande).

Le support des GPIO  est disponible dans Domoticz depuis la version 1726.

Les fonctions standard  du Raspberry Pi des 17 digital In/Out (ou 21 sur les Raspberry revision 2 ) sont maintenant supportées par Domoticz.

Attention : Seules les  signaux logiques sont supportés (vrai/faux , on/off )

Comparé à une carte fille PiFace ,cela économise un peu d’argent puisuqe supporté directement et cela peut suffire pour controler quelques leds ou détecter un changement d’état d’un contact. Piface apporte plus de protection aux entrées/sorties et donne un résultat visuel propre et joli (le WAF, toujours le WAF).

A vous de choisir !

Installation des prérequis

Installation de gcc

il nous faut un compilateur pour pouvoir générer les outils GPIO alors faites :
sudo apt-get install gcc

Installer Wiring PI

  • Le support des GPIO est basé sur la librarie wiringPi  de Gordon Henderson.
  • Il faut installer cette librairie tout d’abord.

un petit

sudo apt-get install git-core

Mettons à jour le système

sudo apt-get update
sudo apt-get upgrade

Allons chercher la wiringPI

git clone https://github.com/wiringpi/wiringpi
cd wiringpi
git pull origin

Compiler

./build

Pour tout cela il vous faudra sans doute faire un petit sudo avant toute commande.

Vérifier que ça marche
gpio readall
doit vous renvoyer toute la liste des pins/GPIO, leur état …

Domoticz

  • Passer en version supérieure à 1726.
  • Si vous avez des vieilles versions de  Domoticz, faites attention à ce que la variable PATH contienne bien un chemin vers /usr/local/bin
  • ou alors utilisez la dernière version de domoticz.sh

Les GPIO

Familiarisons nous avec les GPIO afin de bien comprendre leur rôle en fonction de votre besoin et leur numérotation.

2 pages en anglais rédigées par l’auteur de  wiringPi ici: general considerations et la special pin functions.

Il faut savoir que wiringPi à « sa propre » numérotation des broches,car wiringPi supporte les GPIO mais aussi les autres broches.

Ainsi le GPIO 17 se nomme 17 dans wiringPi, le GPIO 7, 7 et c’est logique, mais Rxd et Txd sont 15 et 16 dans wiringPI.

Mais rassurez vous ce n’est pas compliqué , voire même envoûtant, captivant…

Voila vous en savez suffisament pour passer à la suite.

Configuration

AVANT DE DÉMARRER Domoticz

Les pins gpio dont vous avez besoin doivent être autorisées à être utilisées par des processus sans privilèges (sans sudo). nous avons besoin de quelques commandes pour faire cela mais AVANT le lancement de Domoticz. Le meilleur endroit est  directement dans le script init.d/domoticz.sh.

N.B. l’affectation des exports dans le fichier rc.local ne fonctionne pas car ce fichier est lu APRES le démarrage de domoticz (ordre alphabétique oblige),  Notre domoticz aura donc démarré sans que le rc.local et ses exports aient été lus. C’est pour cela que les exports doivent être placés dans init.d/domoticz.sh au tout début.

Ex:

 /bin/sh
### BEGIN INIT INFO
# Provides:          domoticz
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Home Automation System
# Description:       This daemon will start the Domoticz Home Automation System
### END INIT INFO

# Do NOT "set -e"
/usr/local/bin/gpio export 17 out
/usr/local/bin/gpio export 18 out
/usr/local/bin/gpio export 27 out
/usr/local/bin/gpio export 22 out
/usr/local/bin/gpio export 23 out
/usr/local/bin/gpio export 24 out
/usr/local/bin/gpio export 25 out
/usr/local/bin/gpio export 12 out
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DESC="Domoticz Home Automation System"

Les commandes sont (Notez que  <BCM PIN #> fait référence au chiffre présenté dans cette page tableau au centre de la page) ou alors un gpio readall (oui je sais c’est lasssant mon amour pour gpio readall 😉 )

Panneau_attention Dans tous les cas lisez cette page complémentaire concernant les exports GPIO https://easydomoticz.com/?p=1014

 Pour une sortie : output : vous pilotez qq chose.

gpio export <BCM PIN #> out

exemple :

gpio export 17 out

N.B : lisez le N.B en bas de page pour les GPIO 20, 21, et 25.

Pour une entrée , un  input :  vous recevez une info de qq chose à l’autre bout.

On exporte le gpio puis on écoute les changements d’états (LOW-HIGH) sur ce GPIO

gpio export <BCM PIN #> in
gpio edge <BCM PIN #> both

exemple :

gpio export 18 in
gpio edge 18 both

Vérifions 

une fois que vous avez fait cela, vérifions la configuration avec un :

gpio exports

Vous devez retrouver les pins et le mode in/out que vous avez programmé.

GPIO Pins exported:
  17: out  0  none
  18: in   0  both

Ce qui signifie que l’on devra placer nos exports AVANT le lancement de Domoticz, soit dans le fichier domoticz.sh de init.d et/ou domoticz.sh de /domoticz dans ces 2 cas placez le chemin complet vers gpio de cette façon

/usr/local/bin/gpio export XX out

/usr/local/bin/gpio export XY in …..

Autre méthode :

On peut aussi ajouter ces quelques lignes  dans le /etc/rc.local

# Pin GPIO14 (OUT)
echo “14″ > /sys/class/gpio/export
chmod 777 -R /sys/class/gpio/gpio14
echo “out” > /sys/class/gpio/gpio14/direction

# Pin GPIO8 (IN)
echo “8″ > /sys/class/gpio/export
chmod 777 -R /sys/class/gpio/gpio8
echo “in” > /sys/class/gpio/gpio8/direction
après un reboot
un ls -la /sys/class/gpio/ devrait montrer la liste des gpio exportés

Dans Domoticz

Nous avons besoin de déclarer nos GPIO dans Domoticz.

Allez dans le menu  « Configuration » , dans la partie du bas, tapez votre nom à vous « Port GPIO »  par exemple et sélectionnez « Raspberry’s GPIO Port » dans le type, puis cliquez sur add.

Ensuite allez dans « Interrupteurs », et pour chaque GPIO pin, cliquez sur  » Ajout Manuel » puis faites comme suit:

Pour des outputs (c’est Domoticz qui envoie les ordres vers l’équipement)

Sélectionnez le GPIO port  que l’on à crée ci-dessus, donnez lui un nom à votre convenance, choisissez  « On/Off » et un  « GPIO » type.

Choisissez la pin dans la liste déroulante.

Ceux que vous n’avez pas configurés apparaissent sous le nom de « ! NON EXPORTED » 

gpio_ajoutCeux pour lesquels on a fait un exports sont marqués avec leur statut in ou out.

gpio_exportes

Vous pouvez tester ici les output avec le bouton « Test » et votre LED, sirène, … doit s’activer.

Cliquez ensuite sur « Add Device ».

For inputs : c’est le dispositif qui envoie à Domoticz.

Sélectionnez le GPIO port  que l’on à crée ci-dessus, donnez lui un nom à votre convenance, choisissez  « Contact »  dans SWITCH type et un  « GPIO » dans Type.

gpio_contact

Choisissez la pin dans la liste déroulante. Ceux que vous n’avez pas configurés apparaissent sous le nom de « ! NON EXPORTED ».

gpio_exportes

Cliquez sur « Add Device »

La mention « Open/Closed » correspond au matériel connecté entre la pin en question et la masse, ou la pin connectée à une résistance de pull-up d’un des GPIO car il y qq ports qui ont des résistances internes)

N.B: Pour les GPIO 20, 21, et 25, attention :

les GPIO 20, 21, et 25 fonctionnent en entrée uniquement avec une résistance de pull-up d’après le schéma suivant.

gpio_pins

Une vidéo ici trés détaillée https://www.youtube.com/watch?v=7ve0KLruhU4&noredirect=1

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/
Posted in domoticz, raspberry and tagged , , , , , , .

39 Comments

  1. Bonjour,
    je n’arrive pas à compiler suite à la commande : ./build
    J’ai le message suivant:

    wiringPi Build script
    =====================

    WiringPi Library
    [UnInstall]
    [Compile] wiringPi.c
    make: gcc: Command not found
    make: *** [wiringPi.o] Error 127

    Make Failed…
    Please check the messages and fix any problems. If you’re still stuck,
    then please email all the output and as many details as you can to
    projects@drogon.net

    Merci d’avance pour votre aide.

  2. Bonjour,

    Tu as raté l’install de gcc,
    sudo apt-get install gcc

    devrait résoudre ton problème

  3. Merci pour le 1er dbug.
    Pour le second:
    j’ai bien
    GPIO Pins exported:
    17: out 0 none
    23: in 0 none
    Mais sur domoticz j’ai
    GPIO INIT ERROR lors de la création de l’interrupteur.

  4. Comme ca au feeling, je pense que tu n’a pas fait tes gpio export xx AVANT le lancement de domoticz
    Donc pour vérifier arrête domoticz, fait tes exports et relance domoticz ,le message devrait avoir disparu
    si c ‘est le cas place tes exports dans le fichier /etc/init.d/domoticz.sh et dans le domoticz.sh de /domoticz

    Dis moi si c’est ok

  5. Bonjour,

    Merci, j’avais bien oublier gcc.
    Peut-on piloter les gpio depuis un script lua?
    si oui comment?

    merci d’avance

  6. Je n’ai jamais pratiqué mais comme ca ,au pif, je dirais : comme le reste avec l API et l Idx de ton equipemnt dans Domoticz.

    Tu peux poser la question dans le forum il y a une section SCRIPTS peut être que qq un saura mieux que moi

  7. bonjour.
    Je débute et fais de nombreuses erreurs, je souhaite modifier la liste des exports gpio (j’y ai commis qq erreurs de numerotation de pins).
    Comment faire, puis. comment placer les exports dans le fichier domoticz en début, y a t -il un tutoriel détaillé pour un « nul en linux »
    cordialement
    jacques

  8. Bonsoir
    Qu ‘ entends tu par  » qq erreurs de numerotation de ports » que souhaites tu changer, merci de détailler

    Pour placer en debut de fichier
    Ouvre le domoticz.sh de /etc/init.d
    Avec
    sudo pico /etc/init.d/domoticz.sh
    Puis apres tout les trucs commencant par #
    Mets tes exports comme si tu les faisais a la main
    Sauvegarde (ctrl x)
    Fait un /etc/init.d/domoticz stop
    Puis un start en surveillant si tes exports nz font pas d erreurs

    Voila j espere que ca aidera et que je n ai pas écrit trop de bétises car je fais ca de téte en attendant mon train sur le quai de la gare..

    Bonsoir
    P

  9. bonsoir et merci pour ta réponse,
    Ok pour les informations pour écrire dans domoticz.sh de /etc/init.d.

    Premier point, les exports n’ayant pas été saisis dans  » domoticz.sh de /etc/init.d », elles ne sont plus présentes au re-démarrage….il s’agissait de numéros de BCM non en adéquation avec les gpio que je souhaitais configurer en OUT.

    J’ai donc effectué un nouvel export (gpio de 0 à 3 en mode out, puis vérifié par gpio readall, et enfin relancer domoticz.

    Je suis passé dans domoticz, ai créé un périphérique « Raspberry GPIO port » de type PIFACE, puis passe dans l’onglet interrupteur, ajout manuel , mais ne vois pas le hardware GPIO,

    J’ai donc re-testé le raspi et la piface avec l’émulateur et le fonctionnement est correct.

    Je suis à nouveau planté……….

    Au plaisir de lire les avis et conseils d’un dépanneur.

    Cordialement

    Jacques

  10. Bonsoir
    N’ayant pas de PIFACE je ne peux te répondre précisément, le mieux serait que tu ouvres un sujet dans le forum ici ou des gens plus avertis sauront te répondre

  11. Bonjour
    J’ai un petit souci avec l’utilisation d’un contact sur gpio dans Domoticz.
    Je veux connaître l’état d’un détecteur d’ouverture de porte (mon congélateur).
    L’état est immédiatement reconnu si je fait un « gpio readall » sur un terminal mais dans Domoticz cela peut mettre jusqu’à 10 minutes avant que le contact ne repasse à l’état fermé; ce qui est gênant car je veux envoyer une notification si la porte est ouverte depuis plus de 5 minutes.
    Des idées pour une autre solution?
    Merci d’avance.
    Jihem

  12. Dans ce cas je verrais plutôt un script déclenché via crontab toutes les minutes qui va chercher l’état de ton gpio puis réecrit tout de suite la valeur via l’API JSON dans Domoticz pour mettre à jour le composant et déclencher les notifications

  13. Bonjour Patrice
    C’est en effet une bonne idée et ça éviterai d’utiliser les devices GPIO dans Domoticz ce qui, j’ai l’impression, ralenti l’application.
    Par contre si j’arrive bien à envoyer la commande Json depuis le navigateur, j’ai une erreur quand je l’envoi dans un fichier script:

    !/bin/bash
    wget -O – -q -t 1 http://192.168.1.82:8080/json.htm?type=command&param=switchlight&idx=111&switchcmd=On&level=0
    j’ai essayé avec + ou – d’options avec wget sans succès….
    Problèmes d’autorisations? le fichier est bien exécutable et j’ai essayé différentes combinaisons d’utilisateur et de groupe.
    je ne vois pas où ça coince.
    Merci de tes lumières.
    Jihem

  14. Re
    Je me suis replongé dans le Wiki Domoticz Json et il parlent d’autorisation pour l’envoi d’une Url autrement que par un navigateur.
    Mais là, leur explication dépasse mes capacités!
    Y-a-t’il une autre méthode pour envoyer cette Url?
    Merci

  15. Bonjour

    je vien de suivre votre tuto

    j’arrete domoticz via la commande:
    sudo /etc/init.d/domoticz.sh stop

    puis j’utilise les commandes suivante

    gpio export 27 out
    /usr/local/bin/gpio export 27 out

    gpio export 27 out

    puis

    gpio exports

    ce qui donne

    GPIO Pins exported:
    27: out 0 none

    ensuite je donne cette commande

    /usr/local/bin/gpio export 27 out

    et je redemare domoticz via

    sudo /etc/init.d/domoticz.sh start

    dans domoticz je suis le tuto je configure comme il faut et ensuite je test et la miracle ca marche

    je redemare la rasp et la… ca marche plus –‘ les gpio sont repassé a l »etat de « not exported » dans la config et la sortie ne s’active plus

    Une idee sur la question?

    je vous remercie d’avance

    DD91

  16. Bonjour
    Une idée , oui ca à m^me fait l’objet d’un article spécifique tellement la question est récurrente

    Jette un oeil ici

  17. Bonjour

    merci pour votre réponse rapide

    Je pense qu’il manque le lien 🙂

    Merci pour votre aide

  18. slt merci pour ce tuto c’est exactement ce qu’il me fallait

    J’ai un petit soucis sur le port BCM4 (pin 7) lorsque que je le déclare OUT je recoit un message d’erreur :

    « unable to open GPIO direction interface for pin 4 : no such file or directory »

  19. Bonsoir
    Plusieurs réponses possibles
    on peut faire des redirections de GPIO avec qq chose comme modprobe lirc_rpi gpio_in_pin=18 gpio_out_pin=17 tu as fait des trucs comme cela ? avec lirc

    as tu mis a jour le pi apt-get update /upgrade
    as tu mis à jour le firmware ?

    Est ce que cela persiste apres tout cela ?

  20. bonjour, peut on contrôler des prises dio avec cette méthode sans passer par un rfx com?
    merci beaucoup pour vos réponses

  21. Bonjour
    Non sauf a passer par une box controleur type vera/myfox mais dans ce cas la Domoticz n’a pas d’intéret

  22. merci pour la réponse rapide.
    en fait j’ai un raspberry avec un émetteur 433mhz branché par gpio dessus et des prises dio donc je ne peut pas les contrôler sans investir dans un rfxcom

  23. Ah oui OK
    Dans ce cas un peu de programmation comme ca

    pour piloter tes periphériques, et il faudra y implémenter les protocoles de chaque equipement

    il y a aussi des discussions dans le forum à ce sujet

    Bon courage

  24. Bonjour,

    J’ai remplacer pour l’appli Domoticz mon RPI1B par RPI2.
    Sauf que… Au niveau de GPIO j’ai des déclenchements sur les 2 GPIO en IN, tous les jours à 7h28 & 19h58.
    Ces déclenchements intempestifs sont assez nombreux chaque jour.
    J’ai repris votre config (Domoticz.sh) mais rien y fait.

    Avez vous une idée…

    Merci d’avance.

    Dnis

  25. Bonsoir

    Et que ce passe t’il a 7h28 & 19h58 ?

    un reboot peut être

    un stop/start de Domoticz ?

    autre chose ?

    Verifie dans crontab pour ces horaires

     

     

     

     

  26. J’utilise 2 ports GPIO pour détecter l’ouverture d’une porte de garage et l’autre, le gpio détecte un appuis sur la sonnette. dans ces deux cas la position ON dure normalement 20s voir plus pour la porte. dans le cas de la sonnette (ON est forcé à 30s dans domoticz). Dans les log de domoticz à 7h28 et 19h58 j’ai des pulses d’1 seconde sur ces 2 devices (étrange…)

    IL n’y a rien dans Crontab à part une sauvegarde de domoticz à 1h00 du matin.

    Existe-t-il une incompatibilité entre les GPIO et une RPI2.

  27. Bonjour

    En ce qui me concerne j’ai un rpi3 avec la version v3.5239 de  Domoticz sous

    Or, lorsque je veux ajouter un Raspberry’s GPIO port, je ne trouve pas ce matériel.
    J’ai installé wiringpi et fait un gpio readall : toujours pas l’option.

    Je suis preneur de solution.

    Cdlt

    Sylvain

  28. Bonsoir

    Je viens d’essayer cette solution et toujours rien. Le seul rapport avec mon option c’est PIFACE – Raspberry ….. mais je n’ai pas de carte PIFACE. Je veux seulement utiliser le GPIO.

    Merci

    Sylvain

  29. Bonjour,

     

    j’ai le même problème avec ces nombreux on ou off dans le log du gipo in. Est-il possible de changer le mode de l’interrupteur de le basculer en switch au lieu du inpuls ?

  30. Pingback: Potager – Contrôle d’électrovannes avec les Gpio du Raspberry Pi – Brico-Info – le blog de Bruno CATTEAU

  31. Bonjour , tout nouveau sur domoticz, j’ai suivi exastement votre tuto, et domoticz fonctionne, j’ai installé le plugin philips hue et c’est bon. Dés que j’installe GPIO , domoticz se plante et plus moyen de se connecté DOMOTICZ OFFLINE. je viens de voir sur lr forum que je n’étais pas le seul a rencontré le problème et certain mentionnais wiringpi qui ne serais plus surporté par domoticz. Pouvez vous me dire se qu’il en es ou m’aider a pouvoir utilisé les gpio du raspberry avec domoticz. Merci beaucoup 🙂

  32. Bonjour et merci pour ce tuto.
    Cependant chez moi cela ne fonctionnais pas. A chaque redémarrage les ports GPIO n’étaient pas déclarés je devais toper domoticz, le declarer manuellement et redemarer domoticz margré les modif indiquées dans le script init.d/domoticz.sh.
    après plusieurs essai j’ai trouvé la solution:
    il ne faut pas y écrire:
    /usr/local/bin/gpio export 17 out
    /usr/local/bin/gpio export 18 out (…etc)
    mais juste:
    export 17 out
    export 18 out (…etc)
    comme ça ça marche chez moi

Comments are closed.