Différences
Ci-dessous, les différences entre deux révisions de la page.
— | projets:poelepelletdomotique [2024/06/18 11:34] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Poêle à pellets domotique ====== | ||
+ | //Projet en cours d' | ||
+ | |||
+ | 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, | ||
+ | |||
+ | Le matériel de base : | ||
+ | * Une Raspberry Pi de préférence avec un port Ethernet ou un dongle Wifi, on supposera que l'on part sur une Raspberry Pi B (ou dérivée) pour faciliter les choses par la suite, qu'on nommera plus simplement RPI ; | ||
+ | * Son alimentation 5V (2A de préférence, | ||
+ | * Une carte SD de 8 Go au minimum, on est vite à court d' | ||
+ | * Un lecteur de carte SD adapté au modèle de SD utilisé sur votre RPI. | ||
+ | |||
+ | ===== Première étape - Installation de Raspbian et configuration de base ===== | ||
+ | |||
+ | * Télécharge une image disque de Raspbian Jessie (le module de gestion de la sonde de température | ||
+ | * Dé-zippe l' | ||
+ | * Utilise la commande dd pour tout OS basé sur le noyau Linux (alias Linux) ou Win32DiskImager sur Windows pour copier l' | ||
+ | * Une fois la copie faite, démonte proprement la carte SD afin d' | ||
+ | * Insère la carte SD dans le RPI, mets le sous tension, branche le câble Ethernet, et c'est parti :-) ! | ||
+ | * Connectons nous à ce RPI ! Nous allons utiliser le protocole SSH, avec comme identifiants de base '' | ||
+ | * Pour commencer entre la commande '' | ||
+ | * Redémarre le RPI comme suggéré. | ||
+ | |||
+ | ===== Deuxième étape - Branchement d'une sonde de température et configuration de Raspbian ===== | ||
+ | |||
+ | Matériel nécessaire pour cette phase du projet : | ||
+ | * Une sonde de température DS18B20 (existe en modèle étanche ou non) | ||
+ | * Une résistance de 4,7 kΩ | ||
+ | * Du matériel pour relier tout ça au RPI, au choix, connecteurs divers, platine de prototypage électronique, | ||
+ | |||
+ | // | ||
+ | |||
+ | 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' | ||
+ | * Commence par installer l' | ||
+ | * Une fois cela fait, modifie le fichier ''/ | ||
+ | * Redémarre ton RPI avec la commande '' | ||
+ | * Une fois reconnecté, | ||
+ | |||
+ | 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. | ||
+ | |||
+ | * Pour plus d' | ||
+ | * Pour télécharger les sources, les compiler et installer la bibliothèque : | ||
+ | <sxh [Bash]> | ||
+ | sudo aptitude install libssl-dev | ||
+ | git clone http:// | ||
+ | cd org.eclipse.paho.mqtt.c | ||
+ | make | ||
+ | sudo make install | ||
+ | </ | ||
+ | * Ensuite, installe le serveur/ | ||
+ | * Compile DS18B20Manager avec la commande '' | ||
+ | * Pour tester le logiciel, fais ./ | ||
+ | * Ici, l' | ||
+ | * La dernière phase de cette étape consiste à lancer DS18B20Manager au démarrage du RPI. On peut procéder en rajoutant '' | ||
+ | * Entre les commandes suivantes : | ||
+ | <sxh [Bash]> | ||
+ | sudo cp / | ||
+ | sudo chmod 0755 / | ||
+ | sudo update-rc.d DS18B20Managerd defaults | ||
+ | </ | ||
+ | //à 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' | ||
+ | |||
+ | * Nous allons utiliser un utilitaire bien pratique pour gérer les sorties du RPI : la commande gpio de WiringPi. Je passe les détailles, mais tu vas devoir l' | ||
+ | * Ensuite rends toi dans le répertoire nouvellement créé et compile/ | ||
+ | * Il faut que tu installes un client mqtt en ligne de commande : '' | ||
+ | * Dernière ligne droite, comme pour l' | ||
+ | |||
+ | Voilà 8-) ! Maintenant avec une simple commande '' | ||
+ | |||
+ | // 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' | ||
+ | |||
+ | * Nous allons avoir besoin de la commande '' | ||
+ | * Comme dans la précédente étape, copie le script de démarrage '' | ||
+ | * Le script '' | ||
+ | |||
+ | Comme ce script n'est pas encore documenté, je vais le faire ici, afin de pouvoir le hacker dans de bonnes conditions :-) ! Alors : | ||
+ | * Comme tout thermostat, il est réglable : par exemple, envoie le message MQTT '' | ||
+ | * Ce thermostat dispose de 4 modes : Normal, Eco, Démarrage Forcé et Extinction Forcée. Tu peux faire cela en envoyant, respectivement, | ||
+ | * Pour connaître l' | ||
+ | * Pour le reste, je te laisse découvrir ! Par exemple comment change-t-on la sonde de température utilisée par le thermostat ? Ou encore comment changer de système de chauffage ? Tout simplement une histoire de message et de topic :-) ! | ||
+ | ===== 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' | ||
+ | |||
+ | En attendant, voici ce que je te propose, cher lecteur : nous allons utiliser le script GCalCron python disponible à cette adresse : '' | ||
+ | |||
+ | * Comme indiqué, entre la commande '' | ||
+ | * Récupère le script en question : '' | ||
+ | * Installe cet outil pour python : '' | ||
+ | * Installe la commande '' | ||
+ | * Rends toi sur le site [[https:// | ||
+ | * Entre dans le répertoire '' | ||
+ | * Entre l'ID du calendrier que tu veux utliser, copie le lien généré, ouvre le dans ton navigateur Internet, copie le code généré demandé par le script. C'est terminé pour la partie authentification ! | ||
+ | * Il ne nous reste plus qu'à synchroniser régulièrement (toutes les 10min) le calendrier en modifiant ce qu'on appelle la crontab, avec la commande '' | ||
+ | |||
+ | PATH=/ | ||
+ | */10 * * * * python / | ||
+ | |||
+ | Pour utiliser le calendrier il te suffit de créer un événement et d' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Mais encore : | ||
+ | |||
+ | |||
+ | * -30: / | ||
+ | * -30: / | ||
+ | * end +5: / | ||
+ | * end +5: / | ||
+ | ===== 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:// | ||
+ | * [[https:// | ||
+ | |||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | |||
+ | * Pour plus d'info sur ce service, je t' | ||
+ | * Ensuite crée un compte sur [[https:// | ||
+ | * Maintenant tu peux ajouter des panneaux et des widgets. Je te laisse découvrir la suite ! | ||
+ | |||
+ | Revenons en à nos moutons : | ||
+ | * Comme pour les cas précédents, | ||
+ | |||
+ | Et voilà, tout est opé :-) tous nos petits logiciels s' | ||
+ | |||
+ | |||
+ | ==== 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. | ||
+ | |||
+ | * Pour cela nous allons récupérer les sources de Freeboard, et générer le projet comme suit : | ||
+ | <sxh bash; gutter: false> | ||
+ | git clone https:// | ||
+ | cd freeboard | ||
+ | sudo aptitude install npm | ||
+ | npm install grunt | ||
+ | sudo npm install -g grunt-cli | ||
+ | grunt | ||
+ | </ | ||
+ | * Ensuite, installe un plugin client MQTT pour Freeboard. Pour cela, procède ainsi : | ||
+ | <sxh bash; gutter: false> | ||
+ | cd plugins/ | ||
+ | wget https:// | ||
+ | </ | ||
+ | * Ce plugin nécessite une bibliothèque js, à récupérer et à placer de de la façon suivant : | ||
+ | <sxh bash; gutter: false> | ||
+ | cd ~/ | ||
+ | wget http:// | ||
+ | </ | ||
+ | * Modifie '' | ||
+ | <sxh javascript; gutter: true> | ||
+ | (function() | ||
+ | { | ||
+ | // ### Datasource Definition | ||
+ | // | ||
+ | // ------------------- | ||
+ | freeboard.loadDatasourcePlugin({ | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | "/ | ||
+ | ], | ||
+ | </ | ||
+ | Modifie ''/ | ||
+ | |||
+ | * Puis rajoute le plugin '' | ||
+ | |||
+ | head.js(" | ||
+ | " | ||
+ | // *** Load more plugins here *** | ||
+ | |||
+ | * Maintenant nous allons installer un serveur web, j'ai choisi nginx car il est très performant sur RPI, libre à toi de tenter d' | ||
+ | <sxh bash; gutter: false> | ||
+ | sudo aptitude install nginx | ||
+ | </ | ||
+ | Ensuite, nous allons paramétrer le serveur nginx en modifiant ''/ | ||
+ | |||
+ | server { | ||
+ | root / | ||
+ | index index.html index.htm; | ||
+ | server_name Vulcain; | ||
+ | location / { | ||
+ | try_files $uri $uri/ / | ||
+ | } | ||
+ | } | ||
+ | |||
+ | * Il ne nous reste plus qu'à copier le répertoire '' | ||
+ | <sxh bash; gutter: false> | ||
+ | sudo cp -r ~/freeboard /var/www | ||
+ | sudo reboot | ||
+ | </ | ||
+ | * Il va aussi falloir mettre à jour le broker MQTT afin qu'il supporte les websockets : | ||
+ | <sxh bash; gutter: false> | ||
+ | wget http:// | ||
+ | sudo apt-key add mosquitto-repo.gpg.key | ||
+ | cd / | ||
+ | sudo wget http:// | ||
+ | sudo aptitude update | ||
+ | sudo aptitude upgrade mosquitto | ||
+ | </ | ||
+ | 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 | ||
+ | </ | ||
+ | * Maintenant nous pouvons créer notre dashboard en utilisant directement le serveur MQTT ! Pratique, et beaucoup plus élégant que la précédente solution. Crée alors le freeboard comme tu le souhaites en utilisant le plugin MQTT pour les Datasources. | ||
+ | |||
+ | Ensuite récupère la configuration json via SAVE FREEBOARD. | ||
+ | |||
+ | Un fois cela fait, copie '' | ||
+ | |||
+ | 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' | ||
+ | ===== 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' | ||
+ | |||
+ | Nous allons ici utiliser le projet ThingSpeak, projet OpenSource développé par l' | ||
+ | ]]. Tu peux aussi utiliser le service en ligne [[https:// | ||
+ | |||
+ | * Tout d' | ||
+ | <sxh bash; gutter: | ||
+ | git clone git@github.com: | ||
+ | </ | ||
+ | * Installer Ruby 2, Ruby Gems, rails 4 et un SGBD : | ||
+ | <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:// | ||
+ | source / | ||
+ | rvm install 2.1 | ||
+ | source / | ||
+ | </ | ||
+ | * Paramétre tout ce qui est relatif au serveur mysql : | ||
+ | <sxh bash; gutter: false> | ||
+ | sudo gem install mysql | ||
+ | | ||
+ | cd ~/ | ||
+ | cp config/ | ||
+ | mysql -u root -p | ||
+ | </ | ||
+ | <sxh sql; gutter: false> | ||
+ | CREATE USER ' | ||
+ | GRANT ALL PRIVILEGES ON * . * TO ' | ||
+ | FLUSH PRIVILEGES; | ||
+ | exit | ||
+ | </ | ||
+ | Modifie config/ | ||
+ | <sxh bash; gutter: false> | ||
+ | bundle install | ||
+ | sudo rake db:create | ||
+ | rake db: | ||
+ | </ | ||
+ | * Lance le serveur : | ||
+ | <sxh bash; gutter: false> | ||
+ | rails server | ||
+ | </ | ||
+ | ===== Dixième étape - Création d'un tableau de contrôle physique ===== | ||
+ | |||
+ | Maintenant que notre système de base est opérationnel, | ||
+ | |||
+ | * De quoi régler le thermostat et visualiser la température cible ; | ||
+ | * De quoi visualiser et naviguer entre les 4 modes de fonctionnement, | ||
+ | * De quoi visualiser la température extérieure et la température de la pièce ; | ||
+ | * De quoi visualiser l' | ||
+ | |||
+ | Pour tout cela, nous utiliserons le matériel suivant : | ||
+ | |||
+ | * Un ou plusieurs (soyons fous !) codeurs rotatifs incrémentaux : ce composant est la sorte de molette utilisée de façon commune pour régler le volume des autoradios ; | ||
+ | * Des matrices 8x8 de LEDs pour visualiser la température cible du thermostat, sous forme de jauge, pour visualiser les différents modes et l' | ||
+ | * Des interrupteurs capacitifs afin de pouvoir sélectionner les différents modes ; | ||
+ | * Deux écrans OLED miniatures pour afficher la température de la pièce et la température extérieure ; | ||
+ | * Notre Raspberry Pi préféré et tout ce qui va avec ; | ||
+ | * Un beau boîtier en bois. | ||
+ | |||
+ | De la même manière que pour toutes les étapes précédentes, | ||
+ | |||
+ | ==== Le codeur rotatif incrémental - Késako ?! ==== | ||
+ | |||
+ | Pour faire simple, c'est un capteur qui réagit lorsqu' | ||
+ | |||
+ | Pour les curieux et ceux qui voudraient modifier le système, voici la documentation du capteur : [[http:// | ||
+ | |||
+ | Le capteur dispose de 3 sorties, A, B et C, nous n' | ||
+ | |||
+ | * Fais le montage suivant (ou assimilé tu peux modifier les GPIO cibles comme cela t' | ||
+ | |||
+ | //dessiner le montage// | ||
+ | |||
+ | * Modifie/ | ||
+ | |||
+ | //mettre à disposition le code source// | ||
+ | |||
+ | * C'est gagné :-) ! Nous pouvons régler le thermostat avec une commande physique simple et éprouvée depuis des années. | ||
+ | |||
+ | ==== Les écrans OLED pour l' | ||
+ | |||
+ | 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. | ||
+ | |||
+ | * Pour cela, branche un premier écran en suivant ce schéma : | ||
+ | |||
+ | //faire schéma// | ||
+ | |||
+ | * Dans notre cas, nous allons utiliser le bus de communication I²C. Pour cela, il va falloir charger les modules correspondants au démarrage. Pour cela utilise la commande '' | ||
+ | |||
+ | |||
+ | * Ensuite, nous allons utiliser ce driver pour piloter notre écran : '' | ||
+ | |||
+ | * Compile les exemples avec '' | ||
+ | |||
+ | ==== Problème de remplissage de la sdcard ==== | ||
+ | |||
+ | Il arrive que atd plante et remplisse la sdcard via syslog, il suffit d' | ||
+ | |||
+ | --- // |