:::: MENU ::::

TIP : Activer/Désactiver le point d’accès WiFi via un bouton

Dans le cadre de certains projets il est intéressant de pouvoir exécuter une action sur notre Raspberry via un simple bouton poussoir. Un exemple avec un point d’accès WiFi qu’on ne souhaiterai rendre accessible qu’à la demande pour collecter des données ou effectuer une opération d’administration sur un Raspberry « autonome ». On va voir rapidement avec un petit script Python que l’on peut effectuer ce genre de chose. Dans cet exemple mon besoin est de pouvoir activer uniquement mon point d’accès WiFi quand je souhaite collecter des données sur mon installation Raspberry.

Création du script

Sur une distribution Raspbian (Lite ou non) les outils Python sont déjà installés. On peut donc passer directement à la création du script.

A l’emplacement de votre choix, créer un nouveau fichier .py, dans mon cas  /home/pi/WiFiButton.py.

Ce script va vérifier l’état du GPIO18. Si un contact est fait entre le GPIO18 et la borne GROUND alors on vérifie l’état du daemon  hostapd. Si l’état running  est renvoyé par la commande alors on stop le service, sinon on le start.

Une LED verte (sur le GPIO24) s’allume également à la suite de la commande start et s’éteint si c’est une commande stop. Ne pas oublier la résistance dans le montage pour la LED (ici 100 ohms).

Création du Daemon

Ce script doit « boucler » en permanence pour vérifier l’état de notre bouton. On va donc le transformer en daemon pour qu’il soit initié au démarrage et fonctionne en arrière plan.

Ajouter les droits d’exécution au script :

Supprimer le démarrage automatique du daemon hostapd au boot afin que le fonctionnement soit uniquement manuel :

On crée un nouveau service :

On change les droits du fichier de service :

Enfin on recharge l’ensemble des daemons, on active le démarrage de notre nouveau service au démarrage et on lance le service.

A propos de l'auteur :

Manu

Jeune diplômé en informatique de l'eXia.CESI, et passionné par le monde informatique et ses applications dans la vie quotidienne. Chez moi sont hébergées deux RPi, l'une dédié multimédia, l'autre centre domotique. J'ai également conçu une solution de monitoring de chaufferie collective où notre chère carte fruité est le point central.


4 Comments

  • Avatar Répondre Ter |

    Bonjour.
    je suis assez novice en raspberry, mais ca va, je penses quand même comprendre un peu…
    je viens de suivre votre tuto sur le bouton pour le wifi, je l’ai fait chez moi, mais j’ai aucune réaction d’activation/désactivation du wifi de la raspberry. je n’ai juste pas désactivé d’office au démarrage de la pi.
    vous êtes le seul tuto que j’ai trouvé sur le sujet.
    je précise que je suis sur une raspberry b, mais le gpio est le même pour la première partie.
    que ce soit bien clair aussi, c’est bien un « bouton poussoir » que vous utilisez…

    • Manu Répondre Manu |

      Bonjour,

      J’utilise effectivement un bouton poussoir, qui est fermé uniquement quand on reste appuyé dessus. Il n’a qu’une seule position « stable », ouverte.
      Le tuto ayant deux ans, il est possible que des modifications sur les versions de Raspbian plus récentes empêchent son bon fonctionnement.
      Que renvoi la commande sudo systemctl status WiFiButton.service ?

  • Avatar Répondre Jerome |

    Bonjour, même si ce tuto date , il me semble important de signifier que ces scripts comportent quelques failles de sécurité.
    1 – l’utilisation du « sudo service .. » devrait ce faire via un path de sécurité « sudo /usr/sbin/service … » de manière a éviter que une modification de la Variable d’environnement PATH puisse démarrer un faux script service malveillant en exécutant WiFiButton.py

    2 – bien pire ici, la ou les droits du service en lui même sont suffisant grâce a « sudo chmod 644 ..  » les droits du script WiFiButton.py eux sont une faille collosal : En effet par défaut un script créé dans /home/pi va hérité du own et grp $USER , soit « pi » avec au minimum les droits rw-rw-rw- , mais ensuite vous le rendez exécutable il obtient les droits rwxrwxrwx , le service lui est démarre en au reboot en tant que root il va donc exécuter le script WiFiButton.py en root, mais WiFiButton.py peut très bien être réécrit (même si service offre une certaine protection elle est contournable via la première fail) ce qui permet une élévation de droit à qui réécrit ce script: les droits en écriture sur ce fichier devraient donc être au moins restreint a own et tant que root

    c’est un minimum
    chown root /home/pi/WiFiButton.py
    chmod 761 /home/pi/WiFiButton.py

    • Manu Répondre Manu |

      Merci pour ces précisions.
      Effectivement le tutoriel date un peu et l’aspect sécurité n’avait pas été priorisé à l’époque à sa juste valeur.

Laissez un commentaire