Bon voila l'avancement du projet:
Petit édit... j'avais tout envoyé directement de ma framboise... mais ce n'est pas très confortable...
Donc les nouveautés:
- ajout de tous les boutons (interface WEB) pour piloter tout l'éclairage ainsi que les 2 pompes,
- ajout d'un bouton "Black Out" qui éteint tout l'éclairage d'un coup,
- gestion des jours de la semaine (en remplaçant la commande "isoweekday" par: "datetime.date.isocalendar(now)[2]")
Fichier HTML:
Code : Tout sélectionner
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>WebIOPi | Light Control</title>
<script type="text/javascript" src="/webiopi.js"></script>
<script type="text/javascript">
webiopi().ready(function() {
// Create a "TERRASSE" labeled button for GPIO 17
var button = webiopi().createGPIOButton(17, "TERRASSE");
// Append button to HTML element with ID="controls" using jQuery
$("#controls").append(button);
// Create a "PISCINE BLANC" labeled button for GPIO 27
var button = webiopi().createGPIOButton(27, "PISCINE BLANC");
// Append button to HTML element with ID="controls" using jQuery
$("#controls").append(button);
// Create a "PISCINE COULEURS" labeled button for GPIO 22
var button = webiopi().createGPIOButton(22, "PISCINE COULEURS");
// Append button to HTML element with ID="controls" using jQuery
$("#controls").append(button);
// Create a "ABRIS DE JARDIN" labeled button for GPIO 5
var button = webiopi().createGPIOButton(5, "ABRIS DE JARDIN");
// Append button to HTML element with ID="controls" using jQuery
$("#controls").append(button);
// Create a "CUISINE" labeled button for GPIO 6
var button = webiopi().createGPIOButton(6, "CUISINE");
// Append button to HTML element with ID="controls" using jQuery
$("#controls").append(button);
// Create a "FILTRATION" labeled button for GPIO 13
var button = webiopi().createGPIOButton(13, "FILTRATION");
// Append button to HTML element with ID="controls" using jQuery
$("#controls").append(button);
// Create a "DOMES SOLAIRE" labeled button for GPIO 19
var button = webiopi().createGPIOButton(19, "DOMES SOLAIRE");
// Append button to HTML element with ID="controls" using jQuery
$("#controls").append(button);
// you can also create a button which calls a different function for mouse down and up events
var button = webiopi().createButton("hold", "BLACK OUT !", mousedown, mouseup);
$("#controls").append(button);
// Refresh GPIO buttons
// pass true to refresh repeatedly of false to refresh once
webiopi().refreshGPIO(true);
});
function mousedown() {
webiopi().digitalWrite(17, 0);
webiopi().digitalWrite(27, 0);
webiopi().digitalWrite(22, 0);
webiopi().digitalWrite(5, 0);
webiopi().digitalWrite(6, 0);
}
function mouseup() {
}
</script>
<style type="text/css">
button {
display: block;
margin: 35px 5px 5px 5px;
width: 70%;
height: 70%;
font-size: 48pt;
font-weight: bold;
color: white;
}
#gpio17.LOW {
background-color: Black;
}
#gpio17.HIGH {
background-color: Blue;
}
#gpio27.LOW {
background-color: Black;
}
#gpio27.HIGH {
background-color: Blue;
}
#gpio22.LOW {
background-color: Black;
}
#gpio22.HIGH {
background-color: Green;
}
#gpio5.LOW {
background-color: Black;
}
#gpio5.HIGH {
background-color: Red;
}
#gpio6.LOW {
background-color: Black;
}
#gpio6.HIGH {
background-color: Yellow;
}
#gpio13.LOW {
background-color: Black;
}
#gpio13.HIGH {
background-color: Purple;
}
#gpio19.LOW {
background-color: Black;
}
#gpio19.HIGH {
background-color: Blue;
}
</style>
</head>
<body>
<div id="controls" align="center"></div>
</body>
</html>
Fichier Python:
Code : Tout sélectionner
import webiopi
import datetime
# from datetime import datetime, isoweekday
GPIO = webiopi.GPIO
# Assignation des sorties
# GPIO pin using BCM numbering
# SONDES = GPIO 4 (PIN 7)
TERRASSE = 17 # (PIN 11)
PISCINEBLANC = 27 # (PIN 13)
PISCINECOULEURS = 22 # (PIN 15)
ABRISJARDIN = 5 # (PIN 29)
CUISINE = 6 # (PIN 31)
FILTRATION = 13 # (PIN 33)
DOMESOLAIRE = 19 # (PIN 35)
PRESENCE = 26 # (PIN 37)
# Règle1
actif_1 = 1
sortie1_1 = 1
sortie2_1 = 1
sortie3_1 = 1
sortie4_1 = 1
sortie5_1 = 1
sortie6_1 = 1
sortie7_1 = 1
Lu_1 = 0
Ma_1 = 1
Me_1 = 0
Je_1 = 0
Ve_1 = 0
Sa_1 = 0
Di_1 = 0
jour_debut_1 = 1
mois_debut_1 = 5
heure_debut_1 = 0
minutes_debut_1 = 31
jour_fin_1 = 30
mois_fin_1 = 10
heure_fin_1 = 0
minutes_fin_1 = 33
# Règle2
actif_2 = 1
sortie1_2 = 1
sortie2_2 = 0
sortie3_2 = 0
sortie4_2 = 0
sortie5_2 = 0
sortie6_2 = 0
sortie7_2 = 0
Lu_2 = 1
Ma_2 = 0
Me_2 = 1
Je_2 = 0
Ve_2 = 0
Sa_2 = 1
Di_2 = 1
jour_debut_2 = 1
mois_debut_2 = 5
heure_debut_2 = 20
minutes_debut_2 = 16
jour_fin_2 = 30
mois_fin_2 = 9
heure_fin_2 = 20
minutes_fin_2 = 17
#Règle3
actif_3 = 0
sortie1_3 = 0
sortie2_3 = 0
sortie3_3 = 0
sortie4_3 = 0
sortie5_3 = 0
sortie6_3 = 0
sortie7_3 = 0
Lu_3 = 0
Ma_3 = 0
Me_3 = 0
Je_3 = 0
Ve_3 = 0
Sa_3 = 0
Di_3 = 0
jour_debut_3 = 1
mois_debut_3 = 1
heure_debut_3 = 0
minutes_debut_3 = 0
jour_fin_3 = 1
mois_fin_3 = 1
heure_fin_3 = 0
minutes_fin_3 = 0
#Règle4
actif_4 = 0
sortie1_4 = 0
sortie2_4 = 0
sortie3_4 = 0
sortie4_4 = 0
sortie5_4 = 0
sortie6_4 = 0
sortie7_4 = 0
Lu_4 = 0
Ma_4 = 0
Me_4 = 0
Je_4 = 0
Ve_4 = 0
Sa_4 = 0
Di_4 = 0
jour_debut_4 = 1
mois_debut_4 = 1
heure_debut_4 = 0
minutes_debut_4 = 0
jour_fin_4 = 1
mois_fin_4 = 1
heure_fin_4 = 0
minutes_fin_4 = 0
#Règle5
actif_5 = 0
sortie1_5 = 0
sortie2_5 = 0
sortie3_5 = 0
sortie4_5 = 0
sortie5_5 = 0
sortie6_5 = 0
sortie7_5 = 0
Lu_5 = 0
Ma_5 = 0
Me_5 = 0
Je_5 = 0
Ve_5 = 0
Sa_5 = 0
Di_5 = 0
jour_debut_5 = 1
mois_debut_5 = 1
heure_debut_5 = 0
minutes_debut_5 = 0
jour_fin_5 = 1
mois_fin_5 = 1
heure_fin_5 = 0
minutes_fin_5 = 0
#RègleRAZ
actif_RAZ = 1
sortie1_RAZ = 1
sortie2_RAZ = 1
sortie3_RAZ = 1
sortie4_RAZ = 1
sortie5_RAZ = 1
sortie6_RAZ = 0
sortie7_RAZ = 0
heure_RAZ = 8
minutes_RAZ = 0
# setup function is automatically called at WebIOPi startup
def setup():
# set the GPIO used by the light to output
GPIO.setFunction(TERRASSE, GPIO.OUT)
GPIO.setFunction(PISCINEBLANC, GPIO.OUT)
GPIO.setFunction(PISCINECOULEURS, GPIO.OUT)
GPIO.setFunction(ABRISJARDIN, GPIO.OUT)
GPIO.setFunction(CUISINE, GPIO.OUT)
GPIO.setFunction(FILTRATION, GPIO.OUT)
GPIO.setFunction(DOMESOLAIRE, GPIO.OUT)
GPIO.setFunction(PRESENCE, GPIO.OUT)
# retrieve current datetime
now = datetime.datetime.now()
act_day = datetime.date.isocalendar(now)[2]
# Initialisation des sorties relais 1-7 (la sortie 8 tenant compte de l'état des sorties 1-5 sera piloté automatiquement).
# Initialisation règle 1:
# Initialisation règle 2:
# Initialisation règle 3:
# Initialisation règle 4:
# Initialisation règle 5:
# loop function is repeatedly called by WebIOPi
def loop():
# retrieve current datetime
now = datetime.datetime.now()
act_day = datetime.date.isocalendar(now)[2]
# Gestion des règles:
if (now.second <= 10):
# Gestion Règle 1:
if (actif_1 == 1):
# Vérification si jour actuel programmé dans règle 1:
if (((act_day == 1) and (Lu_1 == 1)) or ((act_day == 2) and (Ma_1 == 1)) or ((act_day == 3) and (Me_1 == 1)) or ((act_day == 4) and (Je_1 == 1)) or ((act_day == 5) and (Ve_1 == 1)) or ((act_day == 6) and (Sa_1 == 1)) or ((act_day == 7) and (Di_1 == 1))):
# Vérification si période programmée active:
# Vérification du mois/jour en cours
if (((now.month > mois_debut_1) and (now.month < mois_fin_1)) or ((now.month == mois_debut_1) and (mois_debut_1 != mois_fin_1) and (now.day >= jour_debut_1)) or ((now.month == mois_fin_1) and (mois_debut_1 != mois_fin_1) and (now.day <= jour_fin_1)) or ((now.month == mois_debut_1) and (mois_debut_1 == mois_fin_1) and (now.day >= jour_debut_1)and (now.day <= jour_fin_1))):
# Vérification plage horaire marche:
if ((now.hour == heure_debut_1) and (now.minute == minutes_debut_1)):
if (sortie1_1 == 1):
# Activation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.LOW):
GPIO.digitalWrite(TERRASSE, GPIO.HIGH)
# Vérification si sortie 2 sélectionnée dans règle 2:
if (sortie2_1 == 1):
# Activation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.LOW):
GPIO.digitalWrite(PISCINEBLANC, GPIO.HIGH)
# Vérification si sortie 3 sélectionnée dans règle 2:
if (sortie3_1 == 1):
# Activation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.LOW):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.HIGH)
# Vérification si sortie 4 sélectionnée dans règle 2:
if (sortie4_1 == 1):
# Activation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.LOW):
GPIO.digitalWrite(ABRISJARDIN, GPIO.HIGH)
# Vérification si sortie 5 sélectionnée dans règle 2:
if (sortie5_1 == 1):
# Activation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.LOW):
GPIO.digitalWrite(CUISINE, GPIO.HIGH)
# Vérification si sortie 6 sélectionnée dans règle 2:
if (sortie6_1 == 1):
# Activation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.LOW):
GPIO.digitalWrite(FILTRATION, GPIO.HIGH)
# Vérification si sortie 7 sélectionnée dans règle 2:
if (sortie7_1 == 1):
# Activation sortie DOMESOLAIRE (sortie 7) si FILTRATION inactive (sortie 6)
if ((GPIO.digitalRead(DOMESOLAIRE) == GPIO.LOW) and (GPIO.digitalRead(FILTRATION) == GPIO.LOW)):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.HIGH)
# Vérification plage horaire arrêt
if ((now.hour == heure_fin_1) and (now.minute == minutes_fin_1)):
# Vérification si sortie 1 sélectionnée dans règle 2:
if (sortie1_1 == 1):
# Désactivation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.HIGH):
GPIO.digitalWrite(TERRASSE, GPIO.LOW)
# Vérification si sortie 2 sélectionnée dans règle 2:
if (sortie2_1 == 1):
# Désactivation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.HIGH):
GPIO.digitalWrite(PISCINEBLANC, GPIO.LOW)
# Vérification si sortie 3 sélectionnée dans règle 2:
if (sortie3_1 == 1):
# Désactivation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.HIGH):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.LOW)
# Vérification si sortie 4 sélectionnée dans règle 2:
if (sortie4_1 == 1):
# Désactivation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.HIGH):
GPIO.digitalWrite(ABRISJARDIN, GPIO.LOW)
# Vérification si sortie 5 sélectionnée dans règle 2:
if (sortie5_1 == 1):
# Désactivation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.HIGH):
GPIO.digitalWrite(CUISINE, GPIO.LOW)
# Vérification si sortie 6 sélectionnée dans règle 2:
if (sortie6_1 == 1):
# Désactivation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.HIGH):
GPIO.digitalWrite(FILTRATION, GPIO.LOW)
# Vérification si sortie 7 sélectionnée dans règle 2:
if (sortie7_1 == 1):
# Désactivation sortie DOMESOLAIRE (sortie 7)
if (GPIO.digitalRead(DOMESOLAIRE) == GPIO.HIGH):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.LOW)
# Gestion Règle 2:
if (actif_2 == 1):
# Vérification si jour actuel programmé dans règle 2:
if (((act_day == 1) and (Lu_2 == 1)) or ((act_day == 2) and (Ma_2 == 1)) or ((act_day == 3) and (Me_2 == 1)) or ((act_day == 4) and (Je_2 == 1)) or ((act_day == 5) and (Ve_2 == 1)) or ((act_day == 6) and (Sa_2 == 1)) or ((act_day == 7) and (Di_2 == 1))):
# Vérification si période programmée active:
# Vérification du mois/jour en cours
if (((now.month > mois_debut_2) and (now.month < mois_fin_2)) or ((now.month == mois_debut_2) and (mois_debut_2 != mois_fin_2) and (now.day >= jour_debut_2)) or ((now.month == mois_fin_2) and (mois_debut_2 != mois_fin_2) and (now.day <= jour_fin_2)) or ((now.month == mois_debut_2) and (mois_debut_2 == mois_fin_2) and (now.day >= jour_debut_2)and (now.day <= jour_fin_2))):
# Vérification plage horaire marche
if ((now.hour == heure_debut_2) and (now.minute == minutes_debut_2)):
# Vérification si sortie 1 sélectionnée dans règle 2:
if (sortie1_2 == 1):
# Activation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.LOW):
GPIO.digitalWrite(TERRASSE, GPIO.HIGH)
# Vérification si sortie 2 sélectionnée dans règle 2:
if (sortie2_2 == 1):
# Activation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.LOW):
GPIO.digitalWrite(PISCINEBLANC, GPIO.HIGH)
# Vérification si sortie 3 sélectionnée dans règle 2:
if (sortie3_2 == 1):
# Activation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.LOW):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.HIGH)
# Vérification si sortie 4 sélectionnée dans règle 2:
if (sortie4_2 == 1):
# Activation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.LOW):
GPIO.digitalWrite(ABRISJARDIN, GPIO.HIGH)
# Vérification si sortie 5 sélectionnée dans règle 2:
if (sortie5_2 == 1):
# Activation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.LOW):
GPIO.digitalWrite(CUISINE, GPIO.HIGH)
# Vérification si sortie 6 sélectionnée dans règle 2:
if (sortie6_2 == 1):
# Activation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.LOW):
GPIO.digitalWrite(FILTRATION, GPIO.HIGH)
# Vérification si sortie 7 sélectionnée dans règle 2:
if (sortie7_2 == 1):
# Activation sortie DOMESOLAIRE (sortie 7) si FILTRATION inactive (sortie 6)
if ((GPIO.digitalRead(DOMESOLAIRE) == GPIO.LOW) and (GPIO.digitalRead(FILTRATION) == GPIO.LOW)):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.HIGH)
# Vérification plage horaire arrêt
if ((now.hour == heure_fin_2) and (now.minute == minutes_fin_2)):
# Vérification si sortie 1 sélectionnée dans règle 2:
if (sortie1_2 == 1):
# Désactivation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.HIGH):
GPIO.digitalWrite(TERRASSE, GPIO.LOW)
# Vérification si sortie 2 sélectionnée dans règle 2:
if (sortie2_2 == 1):
# Désactivation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.HIGH):
GPIO.digitalWrite(PISCINEBLANC, GPIO.LOW)
# Vérification si sortie 3 sélectionnée dans règle 2:
if (sortie3_2 == 1):
# Désactivation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.HIGH):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.LOW)
# Vérification si sortie 4 sélectionnée dans règle 2:
if (sortie4_2 == 1):
# Désactivation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.HIGH):
GPIO.digitalWrite(ABRISJARDIN, GPIO.LOW)
# Vérification si sortie 5 sélectionnée dans règle 2:
if (sortie5_2 == 1):
# Désactivation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.HIGH):
GPIO.digitalWrite(CUISINE, GPIO.LOW)
# Vérification si sortie 6 sélectionnée dans règle 2:
if (sortie6_2 == 1):
# Désactivation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.HIGH):
GPIO.digitalWrite(FILTRATION, GPIO.LOW)
# Vérification si sortie 7 sélectionnée dans règle 2:
if (sortie7_2 == 1):
# Désactivation sortie DOMESOLAIRE (sortie 7)
if (GPIO.digitalRead(DOMESOLAIRE) == GPIO.HIGH):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.LOW)
# Gestion Règle 3:
if (actif_3 == 1):
# Vérification si jour actuel programmé dans règle 3:
if (((act_day == 1) and (Lu_3 == 1)) or ((act_day == 2) and (Ma_3 == 1)) or ((act_day == 3) and (Me_3 == 1)) or ((act_day == 4) and (Je_3 == 1)) or ((act_day == 5) and (Ve_3 == 1)) or ((act_day == 6) and (Sa_3 == 1)) or ((act_day == 7) and (Di_3 == 1))):
# Vérification si période programmée active:
# Vérification du mois/jour en cours
if (((now.month > mois_debut_3) and (now.month < mois_fin_3)) or ((now.month == mois_debut_3) and (mois_debut_3 != mois_fin_3) and (now.day >= jour_debut_3)) or ((now.month == mois_fin_3) and (mois_debut_3 != mois_fin_3) and (now.day <= jour_fin_3)) or ((now.month == mois_debut_3) and (mois_debut_3 == mois_fin_3) and (now.day >= jour_debut_3)and (now.day <= jour_fin_3))):
# Vérification plage horaire marche:
if ((now.hour == heure_debut_3) and (now.minute == minutes_debut_3)):
# Vérification si sortie 1 sélectionnée dans règle 3:
if (sortie1_3 == 1):
# Activation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.LOW):
GPIO.digitalWrite(TERRASSE, GPIO.HIGH)
# Vérification si sortie 2 sélectionnée dans règle 3:
if (sortie2_3 == 1):
# Activation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.LOW):
GPIO.digitalWrite(PISCINEBLANC, GPIO.HIGH)
# Vérification si sortie 3 sélectionnée dans règle 3:
if (sortie3_3 == 1):
# Activation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.LOW):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.HIGH)
# Vérification si sortie 4 sélectionnée dans règle 3:
if (sortie4_3 == 1):
# Activation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.LOW):
GPIO.digitalWrite(ABRISJARDIN, GPIO.HIGH)
# Vérification si sortie 5 sélectionnée dans règle 3:
if (sortie5_3 == 1):
# Activation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.LOW):
GPIO.digitalWrite(CUISINE, GPIO.HIGH)
# Vérification si sortie 6 sélectionnée dans règle 3:
if (sortie6_3 == 1):
# Activation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.LOW):
GPIO.digitalWrite(FILTRATION, GPIO.HIGH)
# Vérification si sortie 7 sélectionnée dans règle 3:
if (sortie7_3 == 1):
# Activation sortie DOMESOLAIRE (sortie 7) si FILTRATION inactive (sortie 6)
if ((GPIO.digitalRead(DOMESOLAIRE) == GPIO.LOW) and (GPIO.digitalRead(FILTRATION) == GPIO.LOW)):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.HIGH)
# Vérification plage horaire arrêt
if ((now.hour == heure_fin_3) and (now.minute == minutes_fin_3)):
# Vérification si sortie 1 sélectionnée dans règle 3:
if (sortie1_3 == 1):
# Désactivation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.HIGH):
GPIO.digitalWrite(TERRASSE, GPIO.LOW)
# Vérification si sortie 2 sélectionnée dans règle 3:
if (sortie2_3 == 1):
# Désactivation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.HIGH):
GPIO.digitalWrite(PISCINEBLANC, GPIO.LOW)
# Vérification si sortie 3 sélectionnée dans règle 3:
if (sortie3_3 == 1):
# Désactivation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.HIGH):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.LOW)
# Vérification si sortie 4 sélectionnée dans règle 3:
if (sortie4_3 == 1):
# Désactivation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.HIGH):
GPIO.digitalWrite(ABRISJARDIN, GPIO.LOW)
# Vérification si sortie 5 sélectionnée dans règle 3:
if (sortie5_3 == 1):
# Désactivation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.HIGH):
GPIO.digitalWrite(CUISINE, GPIO.LOW)
# Vérification si sortie 6 sélectionnée dans règle 3:
if (sortie6_3 == 1):
# Désactivation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.HIGH):
GPIO.digitalWrite(FILTRATION, GPIO.LOW)
# Vérification si sortie 7 sélectionnée dans règle 3:
if (sortie7_3 == 1):
# Désactivation sortie DOMESOLAIRE (sortie 7)
if (GPIO.digitalRead(DOMESOLAIRE) == GPIO.HIGH):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.LOW)
# Gestion Règle 4:
if (actif_4 == 1):
# Vérification si jour actuel programmé dans règle 4:
if (((act_day == 1) and (Lu_4 == 1)) or ((act_day == 2) and (Ma_4 == 1)) or ((act_day == 3) and (Me_4 == 1)) or ((act_day == 4) and (Je_4 == 1)) or ((act_day == 5) and (Ve_4 == 1)) or ((act_day == 6) and (Sa_4 == 1)) or ((act_day == 7) and (Di_4 == 1))):
# Vérification si période programmée active:
# Vérification du mois/jour en cours
if (((now.month > mois_debut_4) and (now.month < mois_fin_4)) or ((now.month == mois_debut_4) and (mois_debut_4 != mois_fin_4) and (now.day >= jour_debut_4)) or ((now.month == mois_fin_4) and (mois_debut_4 != mois_fin_4) and (now.day <= jour_fin_4)) or ((now.month == mois_debut_4) and (mois_debut_4 == mois_fin_4) and (now.day >= jour_debut_4)and (now.day <= jour_fin_4))):
# Vérification plage horaire marche:
if ((now.hour == heure_debut_4) and (now.minute == minutes_debut_4)):
# Vérification si sortie 1 sélectionnée dans règle 4:
if (sortie1_4 == 1):
# Activation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.LOW):
GPIO.digitalWrite(TERRASSE, GPIO.HIGH)
# Vérification si sortie 2 sélectionnée dans règle 4:
if (sortie2_4 == 1):
# Activation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.LOW):
GPIO.digitalWrite(PISCINEBLANC, GPIO.HIGH)
# Vérification si sortie 3 sélectionnée dans règle 4:
if (sortie3_4 == 1):
# Activation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.LOW):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.HIGH)
# Vérification si sortie 4 sélectionnée dans règle 4:
if (sortie4_4 == 1):
# Activation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.LOW):
GPIO.digitalWrite(ABRISJARDIN, GPIO.HIGH)
# Vérification si sortie 5 sélectionnée dans règle 4:
if (sortie5_4 == 1):
# Activation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.LOW):
GPIO.digitalWrite(CUISINE, GPIO.HIGH)
# Vérification si sortie 6 sélectionnée dans règle 4:
if (sortie6_4 == 1):
# Activation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.LOW):
GPIO.digitalWrite(FILTRATION, GPIO.HIGH)
# Vérification si sortie 7 sélectionnée dans règle 4:
if (sortie7_4 == 1):
# Activation sortie DOMESOLAIRE (sortie 7) si FILTRATION inactive (sortie 6)
if ((GPIO.digitalRead(DOMESOLAIRE) == GPIO.LOW) and (GPIO.digitalRead(FILTRATION) == GPIO.LOW)):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.HIGH)
# Vérification plage horaire arrêt
if ((now.hour == heure_fin_4) and (now.minute == minutes_fin_4)):
# Vérification si sortie 1 sélectionnée dans règle 4:
if (sortie1_4 == 1):
# Désactivation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.HIGH):
GPIO.digitalWrite(TERRASSE, GPIO.LOW)
# Vérification si sortie 2 sélectionnée dans règle 4:
if (sortie2_4 == 1):
# Désactivation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.HIGH):
GPIO.digitalWrite(PISCINEBLANC, GPIO.LOW)
# Vérification si sortie 3 sélectionnée dans règle 4:
if (sortie3_4 == 1):
# Désactivation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.HIGH):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.LOW)
# Vérification si sortie 4 sélectionnée dans règle 4:
if (sortie4_4 == 1):
# Désactivation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.HIGH):
GPIO.digitalWrite(ABRISJARDIN, GPIO.LOW)
# Vérification si sortie 5 sélectionnée dans règle 4:
if (sortie5_4 == 1):
# Désactivation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.HIGH):
GPIO.digitalWrite(CUISINE, GPIO.LOW)
# Vérification si sortie 6 sélectionnée dans règle 4:
if (sortie6_4 == 1):
# Désactivation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.HIGH):
GPIO.digitalWrite(FILTRATION, GPIO.LOW)
# Vérification si sortie 7 sélectionnée dans règle 4:
if (sortie7_4 == 1):
# Désactivation sortie DOMESOLAIRE (sortie 7)
if (GPIO.digitalRead(DOMESOLAIRE) == GPIO.HIGH):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.LOW)
# Gestion Règle 5:
if (actif_5 == 1):
# Vérification si jour actuel programmé dans règle 5:
if (((act_day == 1) and (Lu_5 == 1)) or ((act_day == 2) and (Ma_5 == 1)) or ((act_day == 3) and (Me_5 == 1)) or ((act_day == 4) and (Je_5 == 1)) or ((act_day == 5) and (Ve_5 == 1)) or ((act_day == 6) and (Sa_5 == 1)) or ((act_day == 7) and (Di_5 == 1))):
# Vérification si période programmée active:
# Vérification du mois/jour en cours
if (((now.month > mois_debut_5) and (now.month < mois_fin_5)) or ((now.month == mois_debut_5) and (mois_debut_5 != mois_fin_5) and (now.day >= jour_debut_5)) or ((now.month == mois_fin_5) and (mois_debut_5 != mois_fin_5) and (now.day <= jour_fin_5)) or ((now.month == mois_debut_5) and (mois_debut_5 == mois_fin_5) and (now.day >= jour_debut_5)and (now.day <= jour_fin_5))):
# Vérification plage horaire marche:
if ((now.hour == heure_debut_5) and (now.minute == minutes_debut_5)):
# Vérification si sortie 1 sélectionnée dans règle 5:
if (sortie1_5 == 1):
# Activation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.LOW):
GPIO.digitalWrite(TERRASSE, GPIO.HIGH)
# Vérification si sortie 2 sélectionnée dans règle 5:
if (sortie2_5 == 1):
# Activation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.LOW):
GPIO.digitalWrite(PISCINEBLANC, GPIO.HIGH)
# Vérification si sortie 3 sélectionnée dans règle 5:
if (sortie3_5 == 1):
# Activation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.LOW):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.HIGH)
# Vérification si sortie 4 sélectionnée dans règle 5:
if (sortie4_5 == 1):
# Activation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.LOW):
GPIO.digitalWrite(ABRISJARDIN, GPIO.HIGH)
# Vérification si sortie 5 sélectionnée dans règle 5:
if (sortie5_5 == 1):
# Activation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.LOW):
GPIO.digitalWrite(CUISINE, GPIO.HIGH)
# Vérification si sortie 6 sélectionnée dans règle 5:
if (sortie6_5 == 1):
# Activation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.LOW):
GPIO.digitalWrite(FILTRATION, GPIO.HIGH)
# Vérification si sortie 7 sélectionnée dans règle 5:
if (sortie7_5 == 1):
# Activation sortie DOMESOLAIRE (sortie 7) si FILTRATION inactive (sortie 6)
if ((GPIO.digitalRead(DOMESOLAIRE) == GPIO.LOW) and (GPIO.digitalRead(FILTRATION) == GPIO.LOW)):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.HIGH)
# Vérification plage horaire arrêt
if ((now.hour == heure_fin_5) and (now.minute == minutes_fin_5)):
# Vérification si sortie 1 sélectionnée dans règle 5:
if (sortie1_5 == 1):
# Désactivation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.HIGH):
GPIO.digitalWrite(TERRASSE, GPIO.LOW)
# Vérification si sortie 2 sélectionnée dans règle 5:
if (sortie2_5 == 1):
# Désactivation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.HIGH):
GPIO.digitalWrite(PISCINEBLANC, GPIO.LOW)
# Vérification si sortie 3 sélectionnée dans règle 5:
if (sortie3_5 == 1):
# Désactivation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.HIGH):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.LOW)
# Vérification si sortie 4 sélectionnée dans règle 5:
if (sortie4_5 == 1):
# Désactivation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.HIGH):
GPIO.digitalWrite(ABRISJARDIN, GPIO.LOW)
# Vérification si sortie 5 sélectionnée dans règle 5:
if (sortie5_5 == 1):
# Désactivation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.HIGH):
GPIO.digitalWrite(CUISINE, GPIO.LOW)
# Vérification si sortie 6 sélectionnée dans règle 5:
if (sortie6_5 == 1):
# Désactivation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.HIGH):
GPIO.digitalWrite(FILTRATION, GPIO.LOW)
# Vérification si sortie 7 sélectionnée dans règle 5:
if (sortie7_5 == 1):
# Désactivation sortie DOMESOLAIRE (sortie 7)
if (GPIO.digitalRead(DOMESOLAIRE) == GPIO.HIGH):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.LOW)
# Protection pompe DOMESOLAIRE (sortie 7):
if (GPIO.digitalRead(FILTRATION) == GPIO.HIGH):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.LOW)
# Gestion sortie PRESENCE (sortie 8)
# Désactivation détecteur de présence
if ((GPIO.digitalRead(TERRASSE) == GPIO.HIGH) or (GPIO.digitalRead(PISCINEBLANC) == GPIO.HIGH) or (GPIO.digitalRead(PISCINECOULEURS) == GPIO.HIGH) or (GPIO.digitalRead(ABRISJARDIN) == GPIO.HIGH) or (GPIO.digitalRead(CUISINE) == GPIO.HIGH)):
if (GPIO.digitalRead(PRESENCE) == GPIO.LOW):
GPIO.digitalWrite(PRESENCE, GPIO.HIGH)
# Activation détecteur de présence
if ((GPIO.digitalRead(TERRASSE) == GPIO.LOW) and (GPIO.digitalRead(PISCINEBLANC) == GPIO.LOW) and (GPIO.digitalRead(PISCINECOULEURS) == GPIO.LOW) and (GPIO.digitalRead(ABRISJARDIN) == GPIO.LOW) and (GPIO.digitalRead(CUISINE) == GPIO.LOW)):
if (GPIO.digitalRead(PRESENCE) == GPIO.HIGH):
GPIO.digitalWrite(PRESENCE, GPIO.LOW)
# Gestion sortie PISCINECOULEURS (sortie 3), si TERRASSE à 1.
# Désactivation détecteur de présence
if ((GPIO.digitalRead(TERRASSE) == GPIO.HIGH)):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.HIGH)
# Gestion RAZ
if (actif_RAZ == 1):
if ((now.hour == heure_RAZ) and (now.minute == minutes_RAZ)):
# Vérification si sortie 1 sélectionnée dans règle RAZ:
if (sortie1_RAZ == 1):
# Désactivation sortie TERRASSE (sortie 1)
if (GPIO.digitalRead(TERRASSE) == GPIO.HIGH):
GPIO.digitalWrite(TERRASSE, GPIO.LOW)
# Vérification si sortie 2 sélectionnée dans règle RAZ:
if (sortie2_RAZ == 1):
# Désactivation sortie PISCINEBLANC (sortie 2)
if (GPIO.digitalRead(PISCINEBLANC) == GPIO.HIGH):
GPIO.digitalWrite(PISCINEBLANC, GPIO.LOW)
# Vérification si sortie 3 sélectionnée dans règle RAZ:
if (sortie3_RAZ == 1):
# Désactivation sortie PISCINECOULEURS (sortie 3)
if (GPIO.digitalRead(PISCINECOULEURS) == GPIO.HIGH):
GPIO.digitalWrite(PISCINECOULEURS, GPIO.LOW)
# Vérification si sortie 4 sélectionnée dans règle RAZ:
if (sortie4_RAZ == 1):
# Désactivation sortie ABRISJARDIN (sortie 4)
if (GPIO.digitalRead(ABRISJARDIN) == GPIO.HIGH):
GPIO.digitalWrite(ABRISJARDIN, GPIO.LOW)
# Vérification si sortie 5 sélectionnée dans règle RAZ:
if (sortie5_RAZ == 1):
# Désactivation sortie CUISINE (sortie 5)
if (GPIO.digitalRead(CUISINE) == GPIO.HIGH):
GPIO.digitalWrite(CUISINE, GPIO.LOW)
# Vérification si sortie 6 sélectionnée dans règle RAZ:
if (sortie6_RAZ == 1):
# Désactivation sortie FILTRATION (sortie 6)
if (GPIO.digitalRead(FILTRATION) == GPIO.HIGH):
GPIO.digitalWrite(FILTRATION, GPIO.LOW)
# Vérification si sortie 7 sélectionnée dans règle RAZ:
if (sortie7_RAZ == 1):
# Désactivation sortie DOMESOLAIRE (sortie 7)
if (GPIO.digitalRead(DOMESOLAIRE) == GPIO.HIGH):
GPIO.digitalWrite(DOMESOLAIRE, GPIO.LOW)
# gives CPU some time before looping again
webiopi.sleep(0.1)
# destroy function is called at WebIOPi shutdown
def destroy():
GPIO.digitalWrite(TERRASSE, GPIO.LOW)
GPIO.digitalWrite(PISCINEBLANC, GPIO.LOW)
GPIO.digitalWrite(PISCINECOULEURS, GPIO.LOW)
GPIO.digitalWrite(ABRISJARDIN, GPIO.LOW)
GPIO.digitalWrite(CUISINE, GPIO.LOW)
GPIO.digitalWrite(FILTRATION, GPIO.LOW)
GPIO.digitalWrite(DOMESOLAIRE, GPIO.LOW)
GPIO.digitalWrite(PRESENCE, GPIO.LOW)
Il reste toujours à mettre en place les sondes de températures et les programmer...
J'ai aussi joué sur la couleur des boutons... il faudra voir pour choisir un "standard" sympa.
Bien sur, il n'y a toujours pas de sauvegarde dans un fichier "à part" pour les paramètres.
Et pas encore d'interface WEB pour paramétrer cela...
Encore et toujours beaucoup de boulot...
Toutes les initialisations sont encore à faire... mais je crois que je vais encore une fois reprendre la programmation, et modifier pas mal de chose, pour éviter les cas particuliers...
exemple:
Règle 1:
début le 05/02 à 20:00 fin le 20/02 à 2:00
actuellement, je vais bien démarrer une dernière fois le 20/02 à 20h... mais la fin étant le 21/02 (le lendemain du dernier jour de ma règle), elle ne sera pas prise en compte...
J'envisage donc de plutôt partir sur des calculs de durées...
L'heure de début est connue, calculer la durée jusqu'à l'heure de fin, et arrêter lorsqu'il est "heure de début + durée calculée".
Cela réduira sans doute pas mal mes boucles, et permettra aussi une programmation plus simple des initialisations.