Commande de chaudière
Posté : 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 (' ')
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
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 (' ')
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