Atlantis

Google Cloud Messaging (GCM) Android PHP/MySQL/Bash Réseau (NAT, DNS) Géolocalisation Cloud personnel CalDAV/CardDAV

Atlantis est un système domotique sous licence GPL basé sur un Raspberry Pi, un Arduino et une application Android. Le Pi est le serveur. Il est chargé du traitement des données et de leur stockage. On pourrait l'assimiler au cerveau du système. L'Arduino quant à lui, est le muscle. Il intéragit avec le monde réel pour contrôler les lumières, le chauffage, les appareils électriques ou pour lire les capteurs de température, d'humidité ou ceux des différents gaz. L'application Android est l'interface qui permet aux utilisateurs d'intéragir avec le serveur.

Vous trouverez ci-dessous 3 catégories regroupant les fonctions de mon système en espérant vous servir dans vos propres projets.

Bien que ça soit toujours le Raspberry Pi qui revient dans mes articles, les tutoriels ainsi que les codes utilisés peuvent être appliqués à n'importe quel serveur sous Debian directement.

Pour les autres versions Linux, il faudra adapter la syntaxe !

J'ai choisi d'utiliser le PHP pour le traitement des requêtes/données. Le serveur devra héberger un serveur web pour interpréter ce langage. Pour cela, je me suis tourné vers un serveur Apache.

La base de données utilisée est une MySQL et les données sont échangées sous format JSON.

A l'heure actuelle, Atlantis peut :

  • gérer le contenu de la cuisine (quantité, date de péremption, etc.),
  • gérer le contenu de la pharmacie,
  • gérer les autres produits (savon, lessive, etc.)
  • gérer la liste des courses,
  • stocker les données provenant des capteurs (à partir d'un arduino),
  • visualiser l'historique de ces données,
  • voir l'état des appareils enregistrés sur le réseau (connecté/déconnecté, ethernet/wifi, etc.),
  • géolocaliser ses membres pour déclencher certains scénarios (éteindre le chauffage en quittant le domicile),
  • voir l'état du raspberry pi (température, mémoire utilisée, etc.),
  • envoyer des notifications aux membres de la famille.

Code

Le code PHP pour les différentes fonctions décrites ci-dessus se trouve sur mon github.

Avant de commencer à l'utiliser, il faudra effectuer les différents changements :

  • Dans le fichier connexion.php, inscriver les bons paramètres (nom de la base de données, nom d'utilisateur, mot de passe),
  • Dans le fichier atlantis.php, inscriver l'adresse IP ainsi que le numéro de port de votre arduino (et adapter la syntaxe si besoin),
  • Dans le fichier notify.php, ajouter à la variable $apiKey votre clé API que vous pouvez obtenir en suivant cette documentation.

Base de données

Le code SQL nécessaire à la création des différentes tables de votre base de données se trouve ici.

Pour les tables qui ne changeraient pas en permanence, les données doivent être insérées directement (depuis l'interface phpMyAdmin par exemple) car l'application Android ne possède pas encore une interface pour ce but. Ces tables sont les suivantes :

  • devices (les adresses MAC doivent respecter la forme AA:AA:AA:AA:AA:AA tout en majuscule),
  • users.

L'arduino va interagir directement avec les modules afin de lire les valeurs des capteurs ou les contrôler. Le Raspberry avec ses GPIO est capable de cela mais la facilité de programmation des cartes Arduino m'a orienté vers cette décision.

J'ai choisi de connecter l'Arduino directement au réseau grâce à un shield Ethernet afin de garder un minimum de contrôle sur mon système domotique lorsque le Raspberry tombera en panne. L'autre solution étant une communication avec le Pi via le port USB ou les GPIO.

En suivant ce tutoriel, vous programmerez votre carte pour exécuter des fonctions en fonction des caractères envoyés.

Celui-là, vous montrera comment renvoyer des données en format JSON.

L'application Android est l'interface entre l'utilisateur et Atlantis. Son code source est disponible ici. Cette version est basée sur les fragments. Une autre version basée sur les activités uniquement est disponible dans le même répertoire.

Star