Commande de chaudière

Au programme la régulation de température, la climatisation, les chauffe-eau...

Modérateur : Francois

Répondre
jemic
Messages : 13
Enregistré le : ven. 6 janv. 2017 16:13

Commande de chaudière

Message par jemic » ven. 24 févr. 2017 14:54

Je reviens sur ce forum pour vous faire part de ma solution qui fonctionne correctement sans problèmes depuis quelques jours
Mon cahier des charges de l'application
L'application concernée vise à permettre le passage de la chaudière du « hors-gel » à une phase de « chauffage » ou le retour au « hors-gel »
Afin de permettre un contrôle de la bonne marche de l'installation, une webcam est positionnée pour surveiller la température d'eau et la pression du circuit ainsi que l'éclairage de la « led » qui signale sur le thermostat le passage du mode « hors-gel » au mode « chauffage »
Enfin, la chaufferie n'étant normalement pas éclairée, une commande de l'éclairage du local est mise en place afin de permettre à la webcam d'envoyer une image visible
Le système est articulé autour d'un RPI PI2, d'une carte « Piface digital 2 » et d'une webcam « logitech »
Le fichier index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD MTML 4.01//EN">
<html>
<head>
<TITLE>"Gestion du chauffage"</TITLE>
<META name="author" content="admin">
<META name="version" content="1.0.0">
</head>
<frameset cols="50%, *">
<frame src="commande_chauffage.php" name="commande">
<frame src="webcam.php" name="webcam">
</frameset>
</html>

C'est le fichier ouvert par défaut par le navigateur.
Ce fichier execute simplement un partage de l'écran en deux « colonnes » représentant 50 % de l'écran d'affichage (<frameset cols="50%, *">)
Dans chaque colonne, on a un appel à deux pages php : A gauche la page « commande_chauffage.php » qui ouvre sur les boutons de commande des relais de la carte Piface (chauffage et éclairage du local » et à droite la page « webcam » qui affiche l'image de la webcam
Visualiser la webcam
Pour que cela fonctionne, j'ai utilisé "motion"
Un peu compliqué à paramétrer pour éviter de stocker trop d'images sur la SDcard du RPI, vu que tout est en anglais, mais on y arrive avec un peu de persévérance. Nous avons besoin que de streaming pour un appel peu fréquent à l'imagerie...
Le programme webcam.php qui permet d'afficher l'image de la webcam :
<!DOCTYPE html>
<html>
<head>
<title>WEBCAM du chalet</title>
<META name="author" content="admin">
<META name="version" content="1.0.0">
</head>
<body>
<H2> <p align="center">Affichage de l'image de la webcam</H2>
<section class="streaming">
<h3>Streaming WEBCAM</h3>
<p align="center"> <img name="WEBCAM" src="http://monraspberry.com:8081/?action=stream" width="600" height="450" alt="Live Feed" title="WEBCAM" />
</section>
</body>
</html>

L'image de la webcam est centrée dans la colonne de droite de la page
L'image du RPI est envoyée en streaming pur sur la page « index.php »
On limite la taille de l'image pour avoir une image lisible sur un smartphone ou une tablette
L'application commande du chauffage
Elle repose sur un programme en Python appelé par une page PHP
Au départ, j'avais 4 programmes en python, mais chaque action appelant un des 4 programmes réinitialisait la Piface et mettait les relais « off »
Merci à Gilles Thébault (voir pour plus d'explications http://gilles.thebault.free.fr/spip.php?article35) pour son blog qui m'a fourni la solution. Voici le programme Python adapté pour mon application avec la commande des 2 relais de la Piface :
#!/usr/bin/python
import pifacedigitalio as p
from flup.server.fcgi import WSGIServer
import urlparse
# l'ensemble de notre programme se trouve dans la fonction app
def app(environ,start_response):
# reponse html, on n'affiche rien.
start_response("204 No Content", [("Content-Type", "text/html")])
# recupere les champs de requete html
i = urlparse.parse_qs(environ["QUERY_STRING"])
# flup attend une chaine de caractere en retour de la fonction.
# On envoie donc un espace
yield ('&nbsp;')
if "action" in i: #si dans l'url (partie requete) il y a le champs "action"
if i["action"][0] == "hg": # commande chauffage on, bouton « hg » comme en haut à gauche dans la page PHP
p.digital_write(0,1)
elif i["action"][0] == "hd": # commande chauffage off, bouton « hd » comme en haut à droite
p.digital_write(0,0)
elif i["action"][0] == "bg": # commande eclairage on, « bg » comme en bas à gauche
p.digital_write(1,1)
elif i["action"][0] == "bd": # commande eclairage off, « bd » comme en bas à droite
p.digital_write(1,0)
p.init()
# flup s'occupe de communiquer avec le serveur web et permet de lancer la
# fonction "app" en transmettant l'url
WSGIServer(app).run()

Le programme PHP fait appel au programme Python baptisé « programme.py » situé dans le répertoire « cgi-bin » en lui envoyant les paramètres « hg, hd, bg ou bd » qui seront traités pour commander les relais
Ci-après le programme PHP :
<!DOCTYPE html PUBLIC "-//W3C//DTD MTML 4.01//EN">
<html>
<head>
<title>Commande du chauffage</title>
<script Language="Javascript">
function of()
{
document.location="cgi-bin/programme.py?action=hd";
}
function lampe_off()
{
document.location="cgi-bin/programme.py?action=bd";
}
function on()
{
document.location="cgi-bin/programme.py?action=hg";
}
function lampe_on()
{
document.location="cgi-bin/programme.py?action=bg";
}
</script>
</head>
<body>
<H1> <p align="center">Contrôle du chauffage – V3</p></H1>
<HR>
<H2><p align="center"><B>Pour mettre en route le chauffage, cliquez sur le bouton de gauche</B></p>
<p align="center"><B>Pour couper le chauffage, cliquez sur le bouton de droite</B></p>
</H2>
<HR>
<p style="margin-left: 20pt"><img src="img/on.png" onclick="on();"/>
<img src="img/of.png" onclick="of();" align="right"/>
<HR>
<H2><p align="center"><B>Pour allumer la chaufferie, cliquez sur le bouton de gauche</B></p>
<p align="center"><B>Pour éteindre la chaufferie, cliquez sur le bouton de droite</B></p>
</H2>
<HR>
<p style="margin-left: 20pt"><img src="img/on.png" onclick="lampe_on();"/>
<img src="img/of.png" onclick="lampe_off();" align="right"/>
<HR>
</body>

En tête, les 4 fonctions appelées par le programme : mise en route du chauffage, coupure du chauffage, éclairage chaufferie et extinction chaufferie. Elles renvoient les codes hg, hd, bg ou bd en fonction des clicks sur la page.
Les clicks se font sur l'image d'un bouton vert ou rouge appelé par "img src="img/on.png" : l'image « on.png » ou « of.png » sont situées dans le répertoire « img »
Bon, ben c'est à peu près tout pour l'instant
Après de nombreuses coupures d'alimentation, le système redémarre sans problème à ce jour
J'ai mis en place une connexion SSH pour permettre de relancer "motion" au cas où...
Je communiquerai prochainement sur le paramétrage de "motion", de ma "livebox orange" et de la sécurisation de mon installation
Bonne lecture à tous

Ghislain
Raspinaute
Messages : 315
Enregistré le : jeu. 12 nov. 2015 17:39
Localisation : Bourges (18)

Re: Commande de chaudière

Message par Ghislain » ven. 24 févr. 2017 21:46

Balise Code :shock: :lol: et je pense que tu voulais le mettre à la suite de ton post ? non ?

Quand tu parles de coupure d'alimentation, tu parles de coupure de courant sur l'alimentation du Pi ??? Car si c'est ça le système va pas tenir longtemps :|

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Commande de chaudière

Message par Bud Spencer » sam. 25 févr. 2017 11:13

Beau projet :) . J'ai réalisé le même genre de truc pour ma 'maison de campagne'.

petite remarque code : Tu pourrais simplifier tes redirections en utilisant une seule fonction js au lieu de 4. Il suffit juste de passer la commande d'action en paramètre de tes onclick et de là récupérer dans une fonction unique.

Pour le reste, peut être une idée d'optimisation : Ton serveur php ne te sert absolument a rien ici. Ton script python pourrait très bien tout faire y compris avoir le rôle de serveur web.

Si tu veux aller encore plus loin et avoir un system beaucoup plus léger, fiable et performant tout en étant plus simple a faire évoluer et entretenir, lis ca :
viewtopic.php?f=44&t=3033&start=10#p19275
Tu vas voir que les méthodes que tu utilises sont lourdes, et complètement dépassé sur tous les points ;)

Question subsidiaire : Ta chaudière a une fonction hors gel ou c'est ton system qui fait l'analyse de la température et qui gère le chauffage ?
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

jemic
Messages : 13
Enregistré le : ven. 6 janv. 2017 16:13

Re: Commande de chaudière

Message par jemic » mar. 28 févr. 2017 10:10

Grand merci pour vos conseils éclairés à un vieux de près de 70 ans... plus très familiarisé avec les nouvelles technologies et les subtilités de la programmation...
j'avoue avoir un peu de mal à faire la part des choses entre PHP, HTML, Python, Javascript, etc... et les interactions entre les programmes écrits dans ces différents langages. Les manuels n'expliquent pas tout en langage accessible à des néophytes et personne n'a la solution toute faite pour résoudre toutes les difficultés qu'on rencontre quand on passe de la théorie à la pratique...
je prends en compte régulièrement toutes vos remarques et conseils éclairés... et je progresse, lentement mais surement...
j'ai déjà réussi à concocter un système qui fonctionne sans blocage depuis 8 jours après plusieurs semaines de recherches et de tâtonnements pas toujours très efficaces ou avec des résultats inattendus.
Le fait que ma piface se réinitialisait à chaque action sur n'importe lequel des deux relais m'a occasionné quelques nuits blanches pour comprendre ce qui se passait entre les différents programmes que j'avais laborieusement élaboré (chaque click faisait l'appel selon le click à 4 programmes en python avec dans chacun d'eux un "init()" qui me réinitialisait la piface )...
je note donc que je pourrai encore simplifier mon application... mais dans l'immédiat, je vais concrétiser la prochaine étape qui a fait l'objet de plusieurs avertissements autour de mon appli : sécuriser le système en cas de coupure de courant intempestive et bloquer les accès indésirables au système
Pour le blocage des accès en SSH, c'est fait et opérationnel en appliquant les conseils de Clément Grimal (http://clementgrimal.fr/blog/2013/02/12/ssh-securite/)
Au fur et à mesure de mon avancement dans ce projet, je vous ferai part de son état...
Suite à la remarque précédente de Ghislain, je n'ouvrirai pas un nouveau sujet, mais je posterai à la suite de ce sujet...
En attendant, encore un grand merci à vous tous

jemic
Messages : 13
Enregistré le : ven. 6 janv. 2017 16:13

Re: Commande de chaudière

Message par jemic » mar. 28 févr. 2017 23:41

Question subsidiaire : Ta chaudière a une fonction hors gel ou c'est ton system qui fait l'analyse de la température et qui gère le chauffage ?
Réponse :
La chaudière a une fonction hors gel gérée par un thermostat. On programme la température du hors gel séparément de la température de confort. Un modem commande par tout ou rien la mise en température de confort ou le retour au hors gel.
Le but du système est de supprimer la ligne RTC dédiée à la commande par modem du chauffage et de passer par la box pour commander le chauffage

jemic
Messages : 13
Enregistré le : ven. 6 janv. 2017 16:13

Re: Commande de chaudière

Message par jemic » mar. 21 mars 2017 13:30

Suite du projet :
Je cherche une solution qui me permette de mémoriser l'état des relais de la Piface en cas de coupure accidentelle de l'alimentation du RPI
Si mes relais sont "ON", en cas de coupure accidentelle du courant, ils passent systématiquement "OFF" ce qui risque de couper le chauffage sans que je m'en rende compte
Y a-t-il une solution pas trop complexe pour un néophyte pour que les relais restent "ON" ou qu'ils se remettent "ON" après redémarrage du RPI s'ils étaient "ON" avant l'arrêt?
merci de vos idées

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Commande de chaudière

Message par spourre » mar. 21 mars 2017 13:55

jemic a écrit :Suite du projet :
Je cherche une solution qui me permette de mémoriser l'état des relais de la Piface en cas de coupure accidentelle de l'alimentation du RPI
Si mes relais sont "ON", en cas de coupure accidentelle du courant, ils passent systématiquement "OFF" ce qui risque de couper le chauffage sans que je m'en rende compte
Y a-t-il une solution pas trop complexe pour un néophyte pour que les relais restent "ON" ou qu'ils se remettent "ON" après redémarrage du RPI s'ils étaient "ON" avant l'arrêt?
merci de vos idées
Une piste: L'utilisation d'une EEPROM sur le bus I2C comme la PCF 8582.
A lire le très bon article (comme toujours) sur le Blog:
http://www.framboise314.fr/i2c-plus-de- ... actualite/

L'idée est de stocker l'état des relais dans un octet après chaque nouvelle commande.
Au redémarrage, on lit cet oct et on restaure l'état des relais.
Comme il n'y a que peu d'actions et aucune contraintes temporelle, cela se fait en n'importe quel langage.

Je ne sais (plus) pas si le montage embarque une horloge RTC pour garder l'heure, mais certaines embarquent une petite EEPROM pour garder l'heure au redémarrage. S'il reste un peu de place, c'est à envisager.

Sylvain

destroyedlolo
Raspinaute
Messages : 1583
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Commande de chaudière

Message par destroyedlolo » mar. 21 mars 2017 15:25

Salut,
jemic a écrit :Y a-t-il une solution pas trop complexe pour un néophyte pour que les relais restent "ON" ou qu'ils se remettent "ON" après redémarrage du RPI s'ils étaient "ON" avant l'arrêt?
D'un point de vue purement logiciel, il te suffirait de stocker dans un fichier sur un filesystem qui n'est pas en tmpfs l'état de ton relais.
Si tu as une horloge RTC, il y a souvent un peu de RAM embarquée qui est conservée tant que l'horloge est alimentée (ce qui devrait être toujours le cas par sa batterie).

Coté hard, 2 solutions sans trop chercher :
  • tu dis y avoir mis une webCam : pourquoi ne pas simplement mettre une LED en sortie de ton relais ? Ainsi tu verra visuellement si tu es en chauffe ou pas. Motion devrait peut etre meme pouvoir le détecter.
  • Autre solution : remplacer ton relais par un relais bi-stable. L'inconvénient est que du coup, tu utiliseras 2 GPIOs.
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

jemic
Messages : 13
Enregistré le : ven. 6 janv. 2017 16:13

Re: Commande de chaudière

Message par jemic » mar. 21 mars 2017 23:24

Merci pour vos commentaires
Concernant la webcam, c'est déjà ce que je fais car je vois la led d'activation du relai sur la Piface, mais comme je n'ai pas en permanence les yeux fixés sur elle, je cherchais une solution "plus automatique"...
en attendant, je retiens l'idée du relai bistable...

Répondre

Retourner vers « Gestion de la température »