Code Monkey home page Code Monkey logo

domotique-assistant's Introduction

Assistant Domotique

En quelques mots

Assistant domotique est une application web de gestion Domotique s'installant sur un Raspberry pi. Pensée pour rendre votre maison intelligente, elle vous permettra de centraliser vos appareils multimédias, votre éclairage, votre alarme, pour un coût matériel dérisoire.

Adaptable trÚs facilement, l'application s'intalle sur un raspberry pi en quelques minutes et se contrÎle depuis l'adresse IP du serveur, branché à votre box.

Depuis votre smartphone, vous pourrez visualiser en un clin d'oeil les appareils éléctriques de votre maison, faire parler votre raspberry pi, jouer vos playlists, la radio, etc.

L'assistant, une fois configurĂ© veillera sur votre maison lorsque vous n'ĂȘtes pas lĂ , contrĂŽlera la tempĂ©rature pour vous, vous rĂ©veillera le matin en vous informant de l'actualitĂ© et de la mĂ©teo. Il comprendra vos habitudes et saura vous aider dans la gestion de votre domotique.

Pensé pour les développeurs, l'assistant est trÚs facile à maintenir et à faire évoluer. Vous pourrez en quelques lignes rajouter des fonctionnalités, des lampes, des appareils à contrÎler.

Ses avantages

Les avantages principaux de cette solution Domotique en comparaison avec des solutions intégrées sont son coût, et sa rapidité de mise en place. En effet, le coût total du matériel utilisé pour gérer les différentes fonctionnalités est inférieur à 60 euros, contre plus de 300 euros pour une box domotique beaucoup moins évolutive et complÚte.

Pour commencer

L'assistant requiert pour fonctionner parfaitement un Raspberry PI, en version B ou B+. Afin de pousser encore plus loin l'intégration domotique et éléctronique, vous aurez certainement envie de faire l'acquisition d'une Arduino et de quelques capteurs (mouvement, température, humidité, etc) afin d'automatiser un certain nombre de tùches supplémentaires. Un paragraphe est dédié en fin de documentation sur l'intégration d'arduinos dans le processus.

DĂ©mo live de l'app

http://domotique.michaelvilleneuve.fr

Vidéo de l'app en fonctionnement terrain

https://youtu.be/kK4GbKNqGng

Fonctionnalités

Voici les différentes fonctionnalités de l'assistant ainsi que les besoins logiciels ou matériels :

ContrĂŽle des appareils Ă©lectriques

Grùce à des prises télécommandés. Vous pourrez allumer et éteindre vos prises, lumiÚres, appareils électriques à distance. La fréquence utilisée par l'émetteur relié au raspberry Pi vous permettra de contrÎler autre chose que des prises télécommandées. Avec un peu de volonté vous pourrez parvenir à contrÎler n'importe quel appareil fonctionnant sur cette fréquence standard pour la domotique (portail télécommandé, garage, volets roulants, stations météo, etc).

ContrĂŽle de la musique

Via l'interface proposée, vous pourrez contrÎler la musique et utiliser de nombreuses radios. 7 stations sont integrées par défaut. (NRJ, FUN RADIO, NOVA, VIRGIN, RADIO CLASSIQUE, FRANCE MUSIQUE et FIP). Vous pourrez également contrÎler le volume sonore. Lors d'un appui sur play, le lecteur intelligent ira automatiquement chercher dans le dossier "music" et lira aléatoirement les musiques qui s'y trouvent.

Pour aller encore plus loin dans l'integration vous pouvez créer une borne airplay grùce à Shairport.

  • Requis : Des enceintes branchĂ©es sur le raspberry Pi, Alsamixer, MOCP, et une playlist si vous souhaitez jouer vos propres musiques.

ContrÎle du réveil

Vous pourrez créer votre propre réveil grùce au dossier crontab. Pour cela, définissez une tùche CRON ('crontab -e'), et paramétrez l'heure et la récurrence du réveil. Par défaut, l'assistant ne vous réveillera pas le week end. Le scénario intégré est le suivant : L'assistante vous dit Bonjour Monsieur, nous somme le $date, il est $heure, la température exterieure est de $degrés, le temps est $météo., l'assitante allume ensuite une lampe de votre choix et joue doucement Fip radio.

  • Requis : TĂąche Cron programmĂ©e

Alerte SMS

Si l'alarme est déclenchée, alerte en cas de température trop élevée, etc : L'assistant peut vous envoyer des SMS afin de vous avertir de différents scénarios (température trop élevée, alarme, rappel temporaire paiement des factures, etc). Modifiez le fichier /smsenvoi/smsenvoi.config.php afin de paramétrer vos identifiants.

  • Requis : Avoir un compte avec du crĂ©dit SMS sur SMSENVOI.com et rĂ©cupĂ©rer sa clĂ© API dans ses paramĂštres.

Assistant personnalisé

L'onglet assistant vous permet de donner des instructions écrite à l'assistant. Vous pourrez ainsi lui faire exécuter les ordres de votre choix. Exemple, écrivez 'Dis $laphraseadire', ou encore 'exec $unecommandeunix', etc. Pour rajouter des commandes, complétez le switch dans le fichier Gladys.php Par défaut vous pourrez contrÎler les lumiÚres, la musique, lui faire dire des choses, et exécuter n'importe quelle commande unix, l'assistant vous renverra le contenu retourné par la commande. Vous pourrez ainsi sans connexion SSH relancer votre serveur, installer d'autres paquets, etc. Attention à bien paramétrer votre serveur pour que les commandes fonctionnent.

  • Requis : Rien par dĂ©faut, tout dĂ©pend de votre imagination et des commandes que vous souhaitez faire Ă©xecuter.

Statistiques d'utilisation

À chaque fois que vous dĂ©clenchez l'une des lampes ou un des Ă©lĂ©ments en page d'accueil, l'assistant comptabilise le nombre de changements afin de vous offrir des statistiques. À vous d'en faire l'utilisation souhaitĂ©e

  • Requis : Rien

Gestion du chauffage

La gestion du chauffage est intégrée par défaut si vous avez un chauffage éléctrique branché à vos prises télécommandées. Sinon vous devrez passer par des relais pour activer votre chauffage au moment voulu. Par défaut l'assistant déclenche le chauffage dÚs qu'il fait moins de 19 degrÚs.

  • Requis : Capteur de tempĂ©rature pour la gestion automatisĂ©e, prise tĂ©lĂ©commandĂ©es, Ă©metteur 433mhz

Serveur Wake On Lan

Allumage et extinction Ă  distance d'un ordinateur : en configurant votre ordinateur fixe pour le Wake On Lan, vous pourrez rĂ©veiller et Ă©teindre votre ordinateur Ă  distance en renseignant son adresse mac et en installant un petit utilitaire sur votre pc. Pour vĂ©rifier l'Ă©tat de l'ordinateur vous devrez renseigner son adresse IP (elle doit donc ĂȘtre fixe).

  • Requis : Un PC fixe secondaire, WakeOnlan

Alarme de maison

Couplé à un capteur de mouvement, vous pourrez transformer votre raspberry pi en un systÚme efficace d'alarme. Lorsque vous partez de chez vous, activez le verrouillage et la maison sera automatiquement mise sur alarme. Si un mouvement est détécté, une alarme se déclenche et un SMS vous sera automatiquement envoyé pour vous prévenir.

  • Requis : Capteur de mouvement, SMSENVOI

Fonctionnement technique

La configuration principale de l'assistant doit ĂȘtre faite dans le controlleur. Vous renseignerez dans les attributs votre configuration.

Front-end

Le front-end est basé sur Framework7 http://www.idangero.us/framework7/. L'interface est celle d'IOS 7 et est optimisée pour iPhone. Les icÎnes sont issues d'IOS7 via la police d'icÎne pe7 icons.

Le layout global est constitué par les fichiers Header.php et Footer.php. Le systÚme de vues se retrouve dans les fichiers ayant la terminaison '-view.php'.

Tous les différents onglets de l'application se retrouvent dans ces fichiers.

L'ensemble des requĂȘtes au serveur sont faites en AJAX. Le javascript de chaque vue se trouve Ă  la fin des fichiers de vue. Vous pourrez ainsi facilement ajouter des Ă©lĂ©ments Ă  controler en quelques lignes de code, en vous basant sur l'existant.

Back-end

L'assistant est dĂ©veloppĂ© sur la base d'une architecture MVC. N'ayant pas par dĂ©faut de base de donnĂ©es, le Model est remplacĂ© par des fichiers servant de stockage, les requĂȘtes vers les fichiers sont effectuĂ©es dans le controlleur.

L'ensemble des requĂȘtes AJAX atteignent la mĂ©thode Ajax. L'action Ă  effectuĂ©e est dĂ©terminĂ©e par le SWITCH action. Afin d'ajouter des inputs Ă  administrer sur le front, vous n'avez ainsi qu'Ă  rajouter un cas dans le switch. La requĂȘte appellĂ©e via la fonction post() dans la vue sera traitĂ©e Ă  cet endroit.

Par défaut 1 seul controlleur est mis en place. En fonction de vos besoins vous préférerez certainement rajouter des controlleurs afin de séparer les fonctionnalités de l'assistant.

Les routes peuvent ĂȘtre administrĂ©es via le routeur.

L'API d'envoi de SMS peut-ĂȘtre activĂ©e en renseignant vos clĂ© API dans le fichiers /smsenvoi/smsenvoi.config.php. Vous devez vous crĂ©er un compte sur smsenvoi.com.

Les fichiers *.txt servent à stocker les données des capteurs, mais également à stocker la configuration (gestion automatisée du chauffage, du réveil, etc.).

Installation

Les prérequis de l'installation sont les suivants :

# APACHE 2	
sudo apt-get install apache2

# PHP5
sudo apt-get install php5 libapache2-mod-php5

# CURL
sudo apt-get install curl
sudo apt-get install php5-curl

# Ajoutez WWW-DATA aux sudoers

# ALSAMIXER Gestion du son (volume)
sudo apt-get install alsa-utils

# MPG123, Utilisé pour lire les MP3 retournés par Google ainsi que pour la Radio
sudo apt-get install mpg123

# MOCP, Gestion du lecteur média
sudo apt-get update && sudo apt-get install moc moc-ffmpeg-plugin

# WiringPi, gestion des GPIOS
git clone git://git.drogon.net/wiringPi

# RCSwitch, gestion d'un kit émetteur récepteur 433,92mhz
git clone https://github.com/r10r/rcswitch-pi

# Wake On Lan, réveil d'un PC à distance
sudo apt-get install wakeonlan

# Obtenez une IP fixe, soit via votre box, soit directement sur le raspberry pi

Une fois ceci-fait, deux solutions s'offrent à vous pour télécharger l'assistant vers votre serveur.

En SSH

# Placez-vous dans le dossier racine du serveur Apache (par défaut /var/www
cd /var/www 

# installez Git si ce n'est pas déjà fait 
sudo apt-get install git

# Clonez ce repository
git clone https://github.com/Michaelvilleneuve/domotique-assistant

Via FTP ou ce que vous voulez

Téléchargez le zip et placez les fichiers à la racine de votre serveur web.

Accéder à l'administration depuis l'éxterieur

Pour accéder à l'administration de votre domotique depuis l'exterieur, vous devez ouvrir le port 80 de votre box et le diriger vers l'adresse IP du serveur. Ensuite, tapez dans votre navigateur l'adresse IP publique de votre box et vous accéderez à votre assistant.

Précaution sécurité

L'utilisation de l'assistant demande d'offrir à l'utilisateur WWW-DATA des privilÚges élevés sur votre serveur. Faite donc attention à bien sécuriser votre réseau ainsi que votre serveur.

La configuration de base ne requiert pas d'authentification. Il est essentiel de mettre en place un tel systĂšme afin de restreindre l'accĂšs Ă  l'application.

Utilisation comme application Smartphone

Ouvrez la page web et faites "ajouter Ă  l'Ă©cran d'accueil", vous la retrouverez sous forme d'application.

Améliorer votre assistant

Vous vous en doutez, par défaut l'assistant permet de gérer des cas simple d'utilisation avec simplement un raspberry pi. Pour plus d'intégration éléctronique, et donc de scénarios, vous pouvez facilement ajouter une ou plusieurs Arduino et les faire intéragir avec votre systÚme.

Ajouter une Arduino

Afin d'étendre les capacités de notre assistant, vous pouvez ajouter une arduino, qui sera utiliser pour toutes les actions électroniques.

Le Raspberry PI sera ainsi dĂ©diĂ© aux processus de haut niveau (gestion du serveur web, requĂȘtes avec les API externes, gestion de la musique, rĂ©veil, etc).

L'Arduino, branchĂ©e avec un Ethernet Shield par exemple, pourra de son cĂŽtĂ© effectuer des requĂȘtes pour envoyer des informations au Raspberry PI. À travers ces requĂȘtes, vous pourrez communiquer l'Ă©tat de diffĂ©rents capteurs par exemple. Cela servira pour la gestion de l'alarme de maison, pour la tempĂ©rature, l'Ă©coute de signaux 433mhz, etc.

Voici un exemple de requĂȘte HTTP pouvant ĂȘtre envoyĂ©e par une Arduino et comprise par le raspberry pi :

void envoyerrequete(String page, String action, int val) {
  DHT.read11(dht_dpin);
  float tempe = DHT.temperature;
  float hum = DHT.humidity;
  client.stop();
  if (client.connect(server, 80)) {
    Serial.println("connexion...");
    client.println("GET /"+ page +".php?auto=a&q=ajax&action="+ action+"&temp="+tempe+"&hum="+hum+"&val="+val+" HTTP/1.1");
    client.println("Host: 192.168.X.X");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();
  }
  else {
    Serial.println("Echec connexion");
  }
}

Cette fonction prend en paramÚtre la page à questionner (en général index), l'action à effectuer (le case du switch à activer), et dans le cas des prises télécommandées, la valeur que l'on souhaite envoyer (0 pour OFF, 1 pour ON).

domotique-assistant's People

Contributors

michaelvilleneuve avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.