Table des matières

Poêle à pellets domotique

Projet en cours d'élaboration

Sur cette page sont décrites toutes les étapes pour domotiser son poêle à pellets, de la mise en place d'un thermostat à base de Raspberry PI et d'une sonde extérieure, au pilotage à distance du poêle, à la mise en place d'un calendrier afin d'économiser du carburant et de gagner en confort 8-) !

Le matériel de base :

Première étape - Installation de Raspbian et configuration de base

Deuxième étape - Branchement d'une sonde de température et configuration de Raspbian

Matériel nécessaire pour cette phase du projet :

Explications matérielles à faire

Le déroulé de cette étape consiste à paramétrer Raspbian afin de pouvoir lire notre sonde de température qu'on utilisera pour faire un thermostat filaire de la longueur que l'on souhaite, sans toucher au poêle d'origine :

80 01 4b 46 7f ff 10 10 c6 : crc=c6 YES
80 01 4b 46 7f ff 10 10 c6 t=24000

Sinon, reprends les étapes du dessus ;-) ou change ta sonde qui peut être défectueuse.

Troisième étape - Installation et configuration du logiciel de gestion de sondes de température

Ce logiciel développé en C, qu'on va appeler sobrement DS18B20Manager nécessite une bibliothèque MQTT client et un serveur MQTT.

<sxh [Bash]>

sudo aptitude install libssl-dev
git clone http://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.c.git
cd org.eclipse.paho.mqtt.c
make
sudo make install

</sxh>

<sxh [Bash]>

sudo cp /home/pi/DS18B20Manager/DS18B20Managerd /etc/init.d/
sudo chmod 0755 /etc/init.d/DS18B20Managerd
sudo update-rc.d DS18B20Managerd defaults

</sxh> à faire : fournir le script documenter DS18B20Manager

Quatrième étape - Interfaçage matériel, installation et configuration du logiciel de contrôle on/off du poêle

Nous allons avoir besoin d'un simple relais électromécanique pour faire le montage électronique.

Ajouter schéma

Pour la partie logicielle je me suis amusé à le faire en Bash, vue la fréquence à laquelle vont être effectuées les actions d'allumage et d'extinction, il n'y a pas besoin de passer par du C. De plus vues les opérations faites, pas la peine de se casser la tête à re-développer tout un client MQTT quand quelques lignes suffisent !

Voilà 8-) ! Maintenant avec une simple commande on ou off envoyée sur le topic pellet_stove_driver/ground_floor/= de notre broker MQTT nous pourrons démarrer notre sacré poêle à granulés.

modifier le script pour faire une commande de retour + retain message

Cinquième étape - Installation et configuration du logiciel de thermostat

Maintenant nous allons installer les scripts de gestion du thermostat, toujours de mon cru. Pour apprendre à faire tout ça je te conseille d'y jeter un œil, de le modifier, par exemple pour sélectionner la bonne sonde de température. Ne modifie pas l'installation du Fablab en cours STP, ou alors documente ceci dans ce wiki et vérifie que tout fonctionne bien ;-), que l'on ne meurt ni de chaud, ni de froid :-P.

Comme ce script n'est pas encore documenté, je vais le faire ici, afin de pouvoir le hacker dans de bonnes conditions :-) ! Alors :

Sixième étape - Installation et configuration du logiciel de calendrier pour affiner les heures de chauffage

Grâce à cette sixième étape nous allons interfacer notre système de chauffage à un calendrier Google afin d'obtenir un système utilisable par tous les bénévoles du Fablab et ce, à distance : l'idéal aurait été d'utiliser un calendrier OwnCloud (méthode autonome et 100% libre =)), mais n'ayant pas spécialement le temps de re-développer une solution je laisse à quelqu'un d'autre la charge de remplacer cette étape par une autre méthode, ou j'y reviendrais plus tard ;-).

En attendant, voici ce que je te propose, cher lecteur : nous allons utiliser le script GCalCron python disponible à cette adresse : https://github.com/fabriceb/gcalcron/blob/master/README.md.

PATH=/opt/bin:/bin:/usr/bin:/sbin:/usr/sbin
*/10 * * * * python /your/home/directory/gcalcron/gcalcron.py

Pour utiliser le calendrier il te suffit de créer un événement et d'ajouter la commande que tu veux lancer dans la description, en suivant ce formalisme :

Mais encore :

Septième étape - Ajout d'un tableau de bord pour suivre les paramètres vitaux du Fablab

Solution n°1 : freeboard.io

Dans cette n-ième étape du projet, nous allons configurer un tableau de bord, comme celui là : https://freeboard.io/board/rmr6-5. Pour cela nous allons avoir besoin d'un script qui vient récupérer les données des différentes applications que nous avons mis en place précédemment, du service https://dweet.io et du service https://freeboard.io. Quelques explications :

  {
      "state": "1",
      "mode": "Normal",
      "target_temperature": "25",
      "ground_floor_temperature": "23.9"
  }

Revenons en à nos moutons :

Et voilà, tout est opé :-) tous nos petits logiciels s'exécutent chacun de leur côté et communiquent entre eux, le petit dernier va juste espionner les sondes de température et le thermostat, pour retransmettre toutes les données utiles à https://dweet.io. L'objet (“thing”) en question est fablab_chantier_libre/thermostat/ground_floor : le tableau de bord freeboard que nous avons préparé va exploiter ses données.

Solution n°2 : utiliser freeboard sur son propre serveur

Cette solution rend le projet plus autonome : nous allons nous passer des deux services webs présentés précédemment.

<sxh bash; gutter: false>

git clone https://github.com/Freeboard/freeboard.git
cd freeboard
sudo aptitude install npm
npm install grunt
sudo npm install -g grunt-cli
grunt

</sxh>

<sxh bash; gutter: false>

cd plugins/thirdparty/
wget https://raw.githubusercontent.com/alsm/freeboard-mqtt/master/paho.mqtt.plugin.js

</sxh>

<sxh bash; gutter: false>

cd ~/freeboard/lib/js/thirdparty/
wget http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.javascript.git/plain/src/mqttws31.js

</sxh>

<sxh javascript; gutter: true>

(function()
{
	// ### Datasource Definition
	//
	// -------------------
	freeboard.loadDatasourcePlugin({
		"type_name"   : "paho_mqtt",
		"display_name": "Paho MQTT",
        "description" : "Receive data from an MQTT server.",
		"external_scripts" : [
			"/lib/js/thirdparty/mqttws31.js"
		],

</sxh> Modifie /lib/js/thirdparty/mqttws31.js en fonction de la racine du site en question, on verra juste après comment procéder.

        head.js("js/freeboard_plugins.min.js",
	"plugins/thirdparty/paho.mqtt.plugin.js",
              // *** Load more plugins here ***

<sxh bash; gutter: false>

sudo aptitude install nginx

</sxh> Ensuite, nous allons paramétrer le serveur nginx en modifiant /etc/nginx/site-enabled/default de cette façon :

server {
      root /var/www/freeboard;
      index index.html index.htm;
      server_name Vulcain;
      location / {
              try_files $uri $uri/ /index.html;
      }
}

<sxh bash; gutter: false>

sudo cp -r ~/freeboard /var/www
sudo reboot

</sxh>

<sxh bash; gutter: false>

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
sudo aptitude update
sudo aptitude upgrade mosquitto

</sxh> Modifier le fichier de configuration de Mosquitto pour qu'il prenne en charge les websockets :

listener 1883
listener 9001 127.0.0.1
protocol websockets

Redémarrez le serveur ou le RPI : <sxh bash; glutter: false>

sudo service mosquitto stop
sudo service mosquitto start

</sxh>

Ensuite récupère la configuration json via SAVE FREEBOARD.

Un fois cela fait, copie dashboard.json à la racine du serveur web : tu pourras charger la configuration automatiquement, par exemple via l'URL http://192.168.1.2/index.html#source=dashboard.json.

Il y a quand même un gros défaut à cette solution : un seul client à la fois peut être connecté dans la mesure où le plugin Datasource MQTT dans l'état ne permet pas de générer des identifiants de clients mqtt différents. C'est donc un point à travailler pour qui s'y intéresserait.

Huitième étape - Installation et configuration du Twitter Bot pour contrôler à distance le poêle

Neuvième étape - Installation et configuration du logiciel d'enregistrement des mesures de température

Nous allons ici utiliser le projet ThingSpeak, projet OpenSource développé par l'équipe de MatLab. Suivre ce lien pour plus d'informations sur l’utilisation de ThingSpeak : https://github.com/iobridge/ThingSpeak. Tu peux aussi utiliser le service en ligne https://thingspeak.com, dans ce cas tu n'auras pas besoin d'installer tout ce qui est relatif au projet TeamSpeak.

<sxh bash; gutter:false>

git clone git@github.com:iobridge/thingspeak.git

</sxh>

<sxh bash; gutter: false>

sudo aptitude install ruby2.1 rubygems rails mysql-server mysql-client libmysqlclient-dev build-essential libxml2-dev libxslt-dev
curl -sSL https://get.rvm.io | bash -s stable
source /home/pi/.rvm/scripts/rvm
rvm install 2.1
source /home/pi/.rvm/scripts/rvm

</sxh>

<sxh bash; gutter: false>

sudo gem install mysql

cd ~/thingspeak
cp config/database.yml.example config/database.yml
mysql -u root -p

</sxh> <sxh sql; gutter: false>

CREATE USER 'thing'@'localhost' IDENTIFIED BY 'speak';
GRANT ALL PRIVILEGES ON * . * TO 'thing'@'localhost';
FLUSH PRIVILEGES;
exit

</sxh> Modifie config/database.yml en fonction de l'utilisateur rajouté et de son mot de passe. Puis exécute ces commandes : <sxh bash; gutter: false>

bundle install
sudo rake db:create
rake db:schema:load

</sxh>

<sxh bash; gutter: false>

rails server

</sxh>

Dixième étape - Création d'un tableau de contrôle physique

Maintenant que notre système de base est opérationnel, nous souhaiterions avoir un tableau de contrôle physique pour piloter notre chauffage simplement, ça n'est pas obligatoire, ma ça peut être sympa :-), par exemple pour les personnes qui ne sont pas adeptes de technologie :

Pour tout cela, nous utiliserons le matériel suivant :

De la même manière que pour toutes les étapes précédentes, j'ai découpé le projet en petites étapes, avec un petit programme à la clé à chaque fois, en C et/ou en Bash, en fonction de mon humeur (et des contraintes techniques, parce qu'il faut quand même que le système soit un minimum réactif ;-) !).

Le codeur rotatif incrémental - Késako ?!

Pour faire simple, c'est un capteur qui réagit lorsqu'on fait tourner son axe ; on peut alors en déduire plusieurs informations : le sens de rotation, le nombre de crans passés (“detent” en anglais), la vitesse de rotation, le sens de rotation, etc. Ce type de capteur a tout un tas d'applications diverses ; ici nous allons simplement utiliser le retour haptique de notre capteur (tous n'en ont pas) qui nous permet de “sentir” chaque cran, ainsi que le fait de savoir si la rotation en cours est dans le sens de rotation des aiguilles d'une montre ou dans le sens inverse. De ce fait nous pourrons incrémenter ou décrémenter la température de réglage du thermostat.

Pour les curieux et ceux qui voudraient modifier le système, voici la documentation du capteur : http://www.mouser.com/ds/2/15/EC12E-587908.pdf.

Le capteur dispose de 3 sorties, A, B et C, nous n'aurons besoin de lire que les deux premières sur le RPI. Passons à l'action :

dessiner le montage

mettre à disposition le code source

Les écrans OLED pour l'affichage de la température intérieure et extérieure

Maintenant nous allons utiliser deux mini écrans OLED 0.96“ de 128 x 64 pixels sur lesquels apparaîtront les températures intérieures et extérieures.

faire schéma

Problème de remplissage de la sdcard

Il arrive que atd plante et remplisse la sdcard via syslog, il suffit d'utiliser la commande atq et d'effacer les pending jobs (atrm). Il faut aussi recommencer l'installation du script gcalcron, qui mériterait d'être redéveloppé.

Jonathan Alibert 2015/12/02 14:48