Créer une application mobile pour votre système domotique avec HTML/CSS/JS

Nous avons vu ensemble dans de précédents tutoriaux comment mettre en place les bases d'un système domotique : commander les appareils électriques, les ampoules, capturer la température et l'humidité ou installer un serveur web chez soi. Ne serait-il pas agréable de pouvoir créer notre application mobile pour gérer tout cela ?! C'est ce qu'on va voir ensemble dans ce tutoriel :)

Pour commencer, voici un exemple qui ressemble à l'application que nous allons réaliser :

exemple

Application multiplateforme

Comme vous le savez, il y a de multiples plateformes mobiles sur le marché, Android, iOS, WP... et chacune nécessite un langage de programmation différent des autres ! De plus, les membres d'un seul foyer n'utilisent pas forcément tous la même plateforme !

Pour remédier à ces problèmes, nous allons utiliser un magnifique framework open-source appelé Phonegap (ou Cordova). Il va nous épargner l'apprentissage de plusieurs langages informatiques !

Nous allons concevoir notre application en HTML/CSS/JavaScript puis grâce à Phonegap, nous allons la compiler pour chaque plateforme que nous souhaitons utiliser !

Fonctionnement

Notre application va interroger notre serveur qui lui, va récupérer la page affichée par l'Arduino puis transmettre les données à notre application qui va alors les traiter.

Nous allons travailler en 3 étapes pour achever notre application : d'abord l'Arduino, ensuite le Raspberry Pi et en dernier, l'application elle-même.

plan

Arduino

Pour récupérer une donnée quelconque, il faut que l'Arduino la délivre ou du moins, l'affiche en tant que page HTML. Pour cela, nous allons ajouter au code Arduino la commande suivante quand nous souhaitons l'afficher :

        		client.print("Le message affiché est : ");
        		client.println(variable);

Ces lignes seront à ajouter en lignes 53 et 54 dans ce tutoriel par exemple.

Au lieu de faire beaucoup de rêquetes, il serait judicieux d'ajouter à votre code Arduino une commande pour laquelle il affichera dans un ordre précis l'ensemble des états qui vous intéressent. A vous par la suite de traiter ces données !

Raspberry Pi

Maintenant nous allons attaquer notre serveur. Après avoir installer un serveur LAMP (le tutoriel ici), nous allons commencer par installer la librairie cURL puis redémarrer notre serveur :

        		sudo apt-get install php5-curl
        		sudo /etc/init.d/apache2 restart

Maintenant créez une page php sur votre serveur et copiez dedans le code suivant :

        		<?php 
					header("Access-Control-Allow-Origin: *");
					if(isset($_GET['api']) && ($_GET['api'] == "votre_cle_api")){
						if(isset($_GET['do'])){
							$ch = curl_init();
							curl_setopt($ch, CURLOPT_URL, "adresse_ip_arduino:port/?".$_GET['do']);
							curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
							$res = curl_exec($ch);
							curl_close($ch);
							echo $res;
						}else{
							echo "Pas de commandes a executer !";
						}	
					}else{
						echo "Authentification echouee !";
					} 
				?>
Votre page doit se trouver dans le dossier /var/www/ ou dans un sous dossier !
isset permet de vérifier que la variable existe. Si vous ne l'ajoutez pas avant l'utilisation de cette variable dans votre code, il est très probable que votre serveur affiche une erreur !

Le serveur va d'abord vérifier votre identité grâce à l'API que vous transmettez. Si c'est le bon, il va lire la commande transmise par la variable do puis, il va appeler l'Arduino pour récupérer l'information recherchée puis l'afficher. L'application pourra alors la récupérer via l'objet XMLHTTPRequest.

Il est indispensable d'ajouter la première ligne : header("Access-Control-Allow-Origin: *"). Sans elle, vous ne récupérerez rien puisque l'objet XHR dans sa première implémentation n'autorise pas les échanges entre domaines !

Application mobile

Voici la partie la plus intéressante (pour moi) ! L'application est basée principalement sur jQuery Mobile pour l'interface graphique. A laquelle, j'ai ajouté un plugin de phonegap qui permet de générer des messages dans la barre de notification.

La version pour Android est téléchargeable ici.

Si vous souhaitez adapter l'application pour d'autres plateformes (iOS, BlackBerry, Windows Phone, WebOS, Symbian, ou d'autres plateformes supportées par Phonegap), récupérez le code web dans le dossier asset/www de la version d'Android puis suivez les instructions sur le site de phonegap pour l'adapter aux autres plateformes.

Quelques liens utiles

N'hésitez pas si vous avez des questions :)