Mes passions, le boulots, mes coups de gueule...




Raspberry Pi : Actionner un port GPIO lors de l’apparition / disparition de l’IP d’un smartphone sur un réseau local

Catégories : Domotique, Geek, Informatique, Raspberry Pi · par 12 Mar 2015

Vous le savez, je peux activer / désactiver le mode nuit de ma chaudière depuis mon smartphone ou n’importe quel ordinateur connecté à internet.

Mais ce processus est manuel et demande une intervention de ma part lorsque je quitte la maison et quand je rentre chez moi.

J’ai décidé d’automatiser la tâche en fonction de la présence ou non de mon smartphone sur le réseau local.

Depuis bien longtemps, toutes mes machines, smartphone et tablette ont une adresse IP fixe. Seuls les invités reçoivent une IP dynamique.

Voici donc le petit script (à télécharger ici) que j’ai mis au point pour activer/désactiver le chauffage chez moi :

#!/bin/bash

# Vérifie que l'on est en Root
if [[ $EUID -ne 0 ]];
then
	echo "Ce script doit être exécuté avec les privilèges administrateur"
   	exit 1
fi

IP_DEVICE=192.168.0.4	# Adresse IP du smartphone
GPIO_PORT=17		# Port GPIO à contrôler

Hdebut=8		# Début du créneau horaire pour couper le chauffage automatiquement
Hfin=11			# Fin du créneau horaire pour couper le chauffage automatiquement

function read_GPIO {

	if [ `/usr/local/bin/gpio -g read $GPIO_PORT` -eq 0 ]
	then
		return 0	# 0 = True
	else
		return 1	# 1 = False
	fi

}

function switch_GPIO {

	# -g paramètre permettant d'utiliser le numero de GPIO standard et non celui de WiringPi

	/usr/local/bin/gpio -g write $GPIO_PORT $1

}

function try_device {

	# -q paramètre du mode silencieux
	# -c nombre de pings à effectuer

	ping -q -c3 $1 > /dev/null

	if [ $? -eq 0 ]			# Si le résultat du ping est vrai => Donc si le device est trouvé
	then
		if ! read_GPIO		# Si read_GPIO est égal à 1
		then
			echo "$(date +%Y%m%d-%H:%M) - Device $1 trouvé : Mode jour activé"
			switch_GPIO 0
		fi

	elif read_GPIO			# Si read_GPIO est égal à 0
		then
			if [ $(date +%H) -ge $Hdebut ] && [ $(date +%H) -le $Hfin ]
			then
				echo "$(date +%Y%m%d-%H:%M) - Device $1 non trouvé : Mode nuit activé"
				switch_GPIO 1
			fi
	fi

}

try_device $IP_DEVICE

exit 0

Le chauffage ne passera en mode nuit que s’il perd la connexion avec le smartphone entre 8h et 11h du matin, le créneau horaire habituel où je quitte la maison. Ceci permet de remettre manuellement le chauffage en route après 11h pour qu’il fasse chaud chez moi en rentrant le soir.

Sans ce créneau horaire, il serait impossible de réactiver le chauffage manuellement lorsque je ne suis pas chez moi. Le script reprendrait la main et couperait la chaudière quelques minutes après.

Le script test également l’état du GPIO pour éviter de le basculer dans un état où il se trouve déjà et surtout éviter les lignes inutiles dans le log.

Seul l’administrateur pourra exécuter le script.

On va copier le script dans /home/pi et le rendre exécutable :

chmod +x auto_switch_gpio.sh

Pour automatiser la tâche, on va utiliser le service cron :

$ sudo crontab -e

Et on ajoute cette ligne :

*/5 * * * * /home/pi/auto_switch_gpio.sh >> /home/pi/auto_switch_gpio.log 2>&1

Le script sera exécuté toutes les 5 minutes.

Laisser un commentaire

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