{"id":1407,"date":"2015-03-12T14:10:11","date_gmt":"2015-03-12T13:10:11","guid":{"rendered":"https:\/\/www.fanjoe.be\/?p=1407"},"modified":"2015-03-12T14:42:11","modified_gmt":"2015-03-12T13:42:11","slug":"raspberry-pi-actioner-un-port-gpio-lors-de-lapparition-disparition-de-lip-dun-smartphone-sur-un-reseau-local","status":"publish","type":"post","link":"https:\/\/www.fanjoe.be\/?p=1407","title":{"rendered":"Raspberry Pi : Actionner un port GPIO lors de l&rsquo;apparition \/ disparition de l&rsquo;IP d&rsquo;un smartphone sur un r\u00e9seau local"},"content":{"rendered":"<p>Vous le savez, je peux activer \/ d\u00e9sactiver le mode nuit de ma chaudi\u00e8re depuis mon smartphone ou n&rsquo;importe quel ordinateur connect\u00e9 \u00e0 internet.<\/p>\n<p>Mais ce processus est manuel et demande une intervention de ma part lorsque je quitte la maison et quand je rentre chez moi.<\/p>\n<p>J&rsquo;ai d\u00e9cid\u00e9 d&rsquo;automatiser la t\u00e2che en fonction de la pr\u00e9sence ou non de mon smartphone sur le r\u00e9seau local.<\/p>\n<p>Depuis bien longtemps, toutes mes machines, smartphone et tablette ont une adresse IP fixe. Seuls les invit\u00e9s re\u00e7oivent une IP dynamique.<\/p>\n<p>Voici donc le petit script (<a title=\"Script auto switch GPIO\" href=\"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/03\/auto_switch_gpio.sh\" target=\"_blank\">\u00e0 t\u00e9l\u00e9charger ici<\/a>) que j&rsquo;ai mis au point pour activer\/d\u00e9sactiver le chauffage chez moi :<\/p>\n<pre>#!\/bin\/bash\r\n\r\n# V\u00e9rifie que l'on est en Root\r\nif [[ $EUID -ne 0 ]];\r\nthen\r\n\techo \"Ce script doit \u00eatre ex\u00e9cut\u00e9 avec les privil\u00e8ges administrateur\"\r\n   \texit 1\r\nfi\r\n\r\nIP_DEVICE=192.168.0.4\t# Adresse IP du smartphone\r\nGPIO_PORT=17\t\t# Port GPIO \u00e0 contr\u00f4ler\r\n\r\nHdebut=8\t\t# D\u00e9but du cr\u00e9neau horaire pour couper le chauffage automatiquement\r\nHfin=11\t\t\t# Fin du cr\u00e9neau horaire pour couper le chauffage automatiquement\r\n\r\nfunction read_GPIO {\r\n\r\n\tif [ `\/usr\/local\/bin\/gpio -g read $GPIO_PORT` -eq 0 ]\r\n\tthen\r\n\t\treturn 0\t# 0 = True\r\n\telse\r\n\t\treturn 1\t# 1 = False\r\n\tfi\r\n\r\n}\r\n\r\nfunction switch_GPIO {\r\n\r\n\t# -g param\u00e8tre permettant d'utiliser le numero de GPIO standard et non celui de WiringPi\r\n\r\n\t\/usr\/local\/bin\/gpio -g write $GPIO_PORT $1\r\n\r\n}\r\n\r\nfunction try_device {\r\n\r\n\t# -q param\u00e8tre du mode silencieux\r\n\t# -c nombre de pings \u00e0 effectuer\r\n\r\n\tping -q -c3 $1 &gt; \/dev\/null\r\n\r\n\tif [ $? -eq 0 ]\t\t\t# Si le r\u00e9sultat du ping est vrai =&gt; Donc si le device est trouv\u00e9\r\n\tthen\r\n\t\tif ! read_GPIO\t\t# Si read_GPIO est \u00e9gal \u00e0 1\r\n\t\tthen\r\n\t\t\techo \"$(date +%Y%m%d-%H:%M) - Device $1 trouv\u00e9 : Mode jour activ\u00e9\"\r\n\t\t\tswitch_GPIO 0\r\n\t\tfi\r\n\r\n\telif read_GPIO\t\t\t# Si read_GPIO est \u00e9gal \u00e0 0\r\n\t\tthen\r\n\t\t\tif [ $(date +%H) -ge $Hdebut ] &amp;&amp; [ $(date +%H) -le $Hfin ]\r\n\t\t\tthen\r\n\t\t\t\techo \"$(date +%Y%m%d-%H:%M) - Device $1 non trouv\u00e9 : Mode nuit activ\u00e9\"\r\n\t\t\t\tswitch_GPIO 1\r\n\t\t\tfi\r\n\tfi\r\n\r\n}\r\n\r\ntry_device $IP_DEVICE\r\n\r\nexit 0\r\n<\/pre>\n<p>Le chauffage ne passera en mode nuit que s&rsquo;il perd la connexion avec le smartphone entre 8h et 11h du matin, le cr\u00e9neau horaire habituel o\u00f9 je quitte la maison. Ceci permet de remettre manuellement le chauffage en route apr\u00e8s 11h pour qu&rsquo;il fasse chaud chez moi en rentrant le soir.<\/p>\n<p>Sans ce cr\u00e9neau horaire, il serait impossible de r\u00e9activer le chauffage manuellement lorsque je ne suis pas chez moi. Le script reprendrait la main et couperait la chaudi\u00e8re quelques minutes apr\u00e8s.<\/p>\n<p>Le script test \u00e9galement l&rsquo;\u00e9tat du GPIO pour \u00e9viter de le basculer dans un \u00e9tat o\u00f9 il se trouve d\u00e9j\u00e0 et surtout \u00e9viter les lignes inutiles dans le log.<\/p>\n<p>Seul l&rsquo;administrateur pourra ex\u00e9cuter le script.<\/p>\n<p>On va copier le script dans <code>\/home\/pi<\/code> et le rendre ex\u00e9cutable :<\/p>\n<pre>chmod +x auto_switch_gpio.sh<\/pre>\n<p>Pour automatiser la t\u00e2che, on va utiliser le service <a title=\"Cron\" href=\"https:\/\/fr.wikipedia.org\/wiki\/Cron\" target=\"_blank\">cron<\/a> :<\/p>\n<pre>$ sudo crontab -e<\/pre>\n<p>Et on ajoute cette ligne :<\/p>\n<pre>*\/5 * * * * \/home\/pi\/auto_switch_gpio.sh &gt;&gt; \/home\/pi\/auto_switch_gpio.log 2&gt;&amp;1<\/pre>\n<p>Le script sera ex\u00e9cut\u00e9 toutes les 5 minutes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous le savez, je peux activer \/ d\u00e9sactiver le mode nuit de ma chaudi\u00e8re depuis mon smartphone ou n&rsquo;importe quel&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1419,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_post_was_ever_published":false},"categories":[179,10,3,12],"tags":[137,138,139,140,136],"class_list":["post-1407","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-domotique","category-geek","category-informatique","category-raspberrypi","tag-bash","tag-gpio","tag-ip","tag-lan","tag-script","end"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.fanjoe.be\/wp-content\/uploads\/2015\/03\/Script_chauffage-01.png","_links":{"self":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts\/1407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1407"}],"version-history":[{"count":0,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/posts\/1407\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=\/wp\/v2\/media\/1419"}],"wp:attachment":[{"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fanjoe.be\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}