Domotique: contrôle du chauffage, luminaires, musique… par la voix!

Domotique: contrôle du chauffage, luminaires, musique… par la voix!

Bijour bijour!

Venant de terminer un nouveau projet, je viens y faire un petit rapport sur le site! Ce projet est en fait le cadeau de noël destiné à mes parents: contrôler le chauffage à distance. En effet, lorsqu’ils partent au ski par exemple, il est maintenant possible de l’activer quelques jours avant le retour pour ne pas retrouver la maison à 10°C! Voici quelques fonctionnalités de l’installation:
– Contrôle manuel du chauffage via un site internet
– Contrôle par voix à distance (internet) via une application sur téléphone android
– Programmation d’événements à la minute près, éventuellement redondants

– Visualisation de l’état du chauffage ainsi que de l’EJP
– Extinction automatique quelque soit le contexte si EJP activé
– Possibilité d’ajout d’une caméra à vision nocturne
– Possibilité de contrôle de n’importe quel appareil électronique

(Info: l’EJP est un vieux contrat EDF permettant de payer moins chère à l’année mais ayant pour contrainte de nous imposer 15 jours d’EJP par an, où le prix est 10 fois supérieur au tarif normal. Le but étant de limiter la consommation les jours de grand froid).

Installation

Au vue des caractéristiques, certains auront sûrement reconnu l’utilisation du très bon coeur domotique YANA Server par Idleman! Que je remercie au passage car sans lui l’interface graphique aurait été bien moche, et surtout il n’y aurait pas de capacité de modulation, de programmation d’événements etc…

yana

Bien, pour l’installation du cœur domotique, j’ai tout simplement suivie les instructions de Idleman sur un Raspberry Pi, serveur Apache et DB MySql:
http://blog.idleman.fr/raspberry-pi-21-yana-un-nouveau-cur-domotique/

Pour le contrôle du chauffage, j’ai utilisé un relais simple (10A / 220V / 5V) que j’ai en fait non pas branché sur l’alimentation même du chauffage mais en dérivation sur le circuit du bouton d’allumage de l’appareil, alimenté en fait en 5V. Je précise que l’utilisation d’un relais est nécessaire car le bouton (non pas on/off mais bouton poussoir simple) est lui aussi alimenté de son côté, si vous reliez donc le Pi directement, du courant pourra remonter jusqu’à notre petit Raspberry et en altérer le fonctionnement. Je ne détaillerai pas plus car je pense que cela a déjà été fait, et je ne vois rien de particulier dans l’installation du server.

Réseau

Pour accéder au site, il faut évidemment rediriger le flux sur port 80 externe vers l’ip du raspberry pi (port 80 d’origine aussi). Ensuite pour “sécuriser” un peu le tout, j’ai mis en place un parefeu via Iptables sur le modèle de script que j’ai mis en ligne sur ce même site. Il faudra aussi penser à avoir un host chez no-ip ou dyn-dns ou votre service dns favoris pour pouvoir lier l’ip dynamique de votre box à une url facile à retenir. La mienne étant ressemblante à: maison.no-ip.org

Fonctionnalités supplémentaires

Etat du chauffage: A ce stade, il est possible d’allumer le chauffage (en configurant le plugin relais filaire de YANA en mode impulsionnel car bouton poussoir simple en non pas bouton de type switch). Seulement, il n’est pas possible de connaître l’état du chauffage… C’est alors qu’avec mon paternel, l’idée nous est venue de brancher le Pi sur la led du chauffage (allumée quand il est sous tension, éteinte sinon) et d’en lire son état! Pour l’intégrer au site, j’ai bêtement rajouté un peu de php dans le header, exécutant la commande de lecture du port GPIO qui va bien:

$returnVal = false;
exec('/usr/local/bin/gpio read 2', $returnVal);
if($returnVal[0])
{
echo "

Chauffage: Allumee

"; } else { echo "

Chauffage: Eteint

"; }

Ok ce n’est peut être pas la solution la plus jolie, mais je n’ai pas vraiment envie de me prendre la tête avec de la prog Web!

Liaison EJP: Le problème suivant, c’est que si nous sommes en EJP et que nous allumons le chauffage, il va falloir manger du riz pendant pas mal de temps pour compenser la perte d’argent due à la consommation de ce dernier! Idée venant de mon paternel: n’existe-t-il pas un site permettant de vérifier si notre région est en EJP? Il ne sait pas vraiment programmer, mais il a de bonnes idées! En effet il existe une page sur le site EDF avec un tableau résumant l’état d’EJP des différentes régions! Il m’a fallu créer un script bash (lancé automatiquement au démarrage), exécutant toutes les 10 sec un autre script python qui télécharge le code source de cette page en question, et vérifie si nous sommes en EJP. Si oui, il écrit un petit 1 dans un fichier et éteint le chauffage si allumée, et 0 sinon. Simple comme bonjour!

Script bash:

shell

#!/bin/bash

# Script automatisant le checking EJP et le controle du chauffage en consequence
# By Valou

while [ 1 -eq 1 ]
do
sudo python /home/pi/Scripts/chauffage/ejp_priority.py
sleep 10
done

Script Python (attention à bien recréer l’indentation):

python-logo-glassy

#!/usr/bin/env python2.7
# coding: utf-8

print "Checking..."

import sys, time, urllib
import RPi.GPIO as GPIO

PIN_BOUTON = 17
PIN_LED = 27

#GPIO mode notation de pins (notation BCM)
GPIO.setmode(GPIO.BCM)
#Extinction des warnings
GPIO.setwarnings(False)
#Initialisation du port 2 (bouton) en mode ecoute et �0 enoutput
#Led Chauffage
GPIO.setup(PIN_LED, GPIO.IN)
#Bouton Chauffage
GPIO.setup(PIN_BOUTON, GPIO.OUT)

EJP_OUI = '

Ensuite, il me suffit de rajouter dans le header le code php suivant pour afficher l'état de l'EJP:

$out = 0;
if(!$file = fopen("/home/pi/Scripts/chauffage/on.txt", "r"))
{
echo "

Echec lors du rafraichissement

"; } $out = intval(fgets($file, 8)); if($out != 0) { echo "

EJP: On

"; } else { echo "

EJP: Off

"; }

Et voilà le travail terminé! Maintenant je peux voir l'état du chauffage ET de l'EJP sur le site internet. De plus, si l'EJP se déclenche dans la nuit par exemple, le chauffage sera éteint automatiquement!

Montage

Tout simplement quelques photos de l'installation:

IMAG0170 IMAG0167 IMAG0169 IMAG0171 IMAG0172

Informations

Je rajouterai des détails sur d'éventuels améliorations (ajout d'une caméra à vision nocturne, commande de luminaires sans fil etc...)

[EDIT] : Pour avoir une solution plus jolie au niveau de l'état du chauffage / EJP, j'ai crée un petit plugin en prenant pour base un modèle fournie avec YANA. En fait, cela a vraiment été bien pensé, et il est facile d'y ajouter ses propres fonctionnalités. Maintenant il y a un onglet EJP qui précise l'état du chauffage (avec le code php ci dessus) ainsi que l'état de l'EJP, les jours restants et un petit historique. Ces informations sont simplement récupérées par le script python qui télécharge le code source de la page EDF, puis parsé par php pour avoir un affichage bien formaté.

[EDIT] : J'ai pu aussi ajouter un plugin température téléchargeable sur le market yana d'Idleman, qui permet d'afficher la température ambiante en branchant un capteur adéquate. Tout est documenté dans le plugin (quelle sonde acheter, comment faire les branchements etc...). J'ai par la suite développé un deuxième plugin permettant d'écouter la musique locale ou radios internet via le serveur. Tout peut se contrôler par la voix, c'est plus sympa!

[EDIT] : Pour checker l'EJP, au lieu de lancer un script bash au démarrage qui va boucler, il est plus intéressant de passer par cron. Pour ajouter un tâche plannifiée:

crontab -e 

Puis ajouter la ligne suivante au fichier pour lancer le script toutes les minutes (attention au chemin utilisé, modifiez le en conséquence)

*/1 * * * *        sudo python /home/pi/Scripts/chauffage/ejp_priority.py 

Screen des plugins:

EJP
yana_musique

Tagués avec :
4 commentaires sur “Domotique: contrôle du chauffage, luminaires, musique… par la voix!
  1. jean-françois dit :

    Salut
    Une petite question sur ton plugin température sur yana server.chez moi il fonctionne a merveille et m affiche des belles courbes.Étant nul en programmation je me (et te) demande comment faire pour rajouter une autre sonde .j ai bien branché une deuxième sonde qui est bien reconnue (système/bus/w1/devices)mais elle n’apparait pas dans tana server.Si tu peux m’aider ça serait sympa.
    A bientôt peu être

    • Tr!cK dit :

      Salut! Merci pour ton retour, ça fait plaisir =)
      Sinon niveau dev, ce n’est pas très compliqué, je peux te programmer le plugin pour afficher la deuxième sonde. Seulement, j’aurai besoin que tu me donnes le retour de la commande suivante:
      ls /sys/bus/w1/devices/
      Cela me permettra d’identifier tes sondes (tu devrais avoir deux dossiers comme retour, nommés avec des chiffres). Une fois que je pourrai les identifier, est-ce que tu veux que je te rajoute deux diagrammes supplémentaires (historique des 12 derniers jours et 12 dernières heures) pour la deuxième sonde?

  2. Julien dit :

    Salut à toi jeune malin!
    Comme beaucoup, j’ai installer YANA sur une RPI 2. mon projet est de pouvoir piloter une pompe de 3 façon différentes en fonction des temporisations que je souhaites lancer (programme douche, programme lavage VTT, vaisselle) par commande vocale.

    première question: puis-je installer python directement grace à un “sudo apt-get install python” sans me soucier de l’emplacement du programme sur ma RPI2?

    deuxième question: où dois-je enregistrer les scripts que je créé pour piloter ma pompe?

    troisième question: que dois-je taper comme commande dans Yana (à l’emplacement “paramètre” dans le menu “commandes vocales”) pour qu’il exécute le script souhaité?

    Merci pour ton aide!

    Julien

    • valou dit :

      Salut!
      – Alors si tu as déjà tes scripts, tu peux les enregistrer par exemple dans “/home/pi/Scripts/” en tapant “mkdir /home/pi/Scripts” juste avant pour créer le dossier Scripts.
      – Pour python, tu peux bien sûr faire un “sudo apt-get install python” (déjà installé par défaut me semble-t-il) sans aucune autre commande pour l’installation de python.
      – Pour l’ajout d’une commande vocale: “lave mon VTT” (ou ce que tu veux pour la commande vocale) – Confidence: par défaut – Action: exécuter une commande (sur le serveur) – Paramètre: sudo python /home/pi/Scripts/mon_script_lavage.py.

      Voilà j’espère que j’ai répondu à tes questions, n’hésite pas à me répondre si quelque chose ne va pas.
      A plus =)

      (Au passage, je viens de faire un tour sur ton site, je l’ai mis dans mes favoris dans la foulée!)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

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