programmation simple filtration piscine ou autre

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
acuponctus
Messages : 60
Enregistré le : 13 sept. 2016, 12:10
Contact :

programmation simple filtration piscine ou autre

Message par acuponctus »

Bonjour,

Je tente de préparer un script pour la gestion de la filtration de la piscine pour l'été prochain, ayant un compteur Tempo avec un tarif plus avantageux la nuit.
Je me suis inspiré de ce que j'ai pu glaner sur le forum.

Aussi voici ce qui est en place :
variables personnalisées : Filtration-debut et Filtration-fin
un mode "Maison occupée" et un mode "Absent" (sous forme de switch virtuel de type on/off)

ces 2 modes s'il sont activés changent les variables personnalisées des horaires de filtration
le premier : assigne les horaires de filtration de 9h00 à 22h00
le second en cas d'absence : de 22h00 à 6h00

Hier à 22h00 ca c'est bien mis en route, cependant ca c'est arreté à 00h00 avec le mode "Maison occupée".
La première condition elseif est vérifiée pourtant il me semble entre minuit et 6h00 ?
et pourtant dans les logs rien, la filtration s'est arrêtée à minuit.

Qu'en dites vous ? Merci pour votre aide.
Voici le script :

Code : Tout sélectionner

commandArray = {}
t1 = os.date("%H:%M")  

print ("-- debut script --");
print (t1)
if (t1 >= uservariables["Filtration-debut"] and t1 <= uservariables["Filtration-fin"] and otherdevices['Maison occupée']=="On")  then
-- print ("OK dans premiere condition")
 if (otherdevices['Filtration Piscine - 108']=='Off') then
    commandArray['Filtration Piscine - 108'] = 'On'
    print ("mise en route filtration")
    commandArray['SendEmail']='Allumage filtration jour#filtration en route#mon@email.com'
 end
 
elseif ((t1 >= uservariables["Filtration-debut"] and otherdevices['Maison occupée']=="Off") or (t1 <= uservariables["Filtration-fin"] and otherdevices['Maison occupée']=="Off"))  then
 if (otherdevices['Filtration Piscine - 108']=='Off') then
    commandArray['Filtration Piscine - 108'] = 'On'    
    print ("heure de début : "..uservariables["Filtration-debut"])
    print ("condition nuit : OK")
    print ("heure de fin : "..uservariables["Filtration-fin"])
    commandArray['SendEmail']='Allumage filtration nuit#filtration en route nuit#mon@email.com'
 end    

elseif (otherdevices['Filtration Piscine - 108']=='On') then
    commandArray['Filtration Piscine - 108'] = 'Off'
    print ("arrêt filtration")
    commandArray['SendEmail']='on eteint la filtration#ARRET filtration #mon@email.com'

end
print ("--  fin script  --");
return commandArray
ABOX Raspberry Pi 3 Modèle B Plus
domoticz V2020.2 - Stick Aeon - 3x multisensors 6+ - Fibaro FGSD-002 - 6 prises Horsky flashées - 2x cameras sv3c et 1x wansview - 3xTH16 2xBasic et 1xRF tous flashés avec EasyESP

thier
Messages : 774
Enregistré le : 26 sept. 2015, 10:32
Localisation : charente

Re: programmation simple filtration piscine ou autre

Message par thier »

Je dirais qu'à partir de minuit ta condition t1 >= uservariables["Filtration-debut"] n'est plus vrai puisque t1 devient t1 < uservariables["Filtration-debut"] donc tu passes à la fin de ton script qui arrête ta pompe. Je pense que ta condition sur l'heure devrait être (t1 > heure debut or t1 < heure de fin)
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.

boum
Messages : 101
Enregistré le : 18 janv. 2019, 11:34
Localisation : France

Re: programmation simple filtration piscine ou autre

Message par boum »

Le problème n'est pas très clair. Pour débroussailler un peu, il faudrait rajouter un peu de log pour comprendre :

Code : Tout sélectionner

print ("-- debut script --");
local fd = uservariables["Filtration-debut"]
local ff = uservariables["Filtration-fin"]
local mo = otherdevices['Maison occupée']
local fp = otherdevices['Filtration Piscine - 108']
print (t1, fd, ff, mo, fp)
print ((t1>=fd),(t1<=ff))
Voilà. Quitte à forcer t1 à une valeur de 00:00 ou 01:00 (à vérifier le format de os.date)
Domoticz v4.10717 sur Pi³ / Z-Wave / RFXCom

acuponctus
Messages : 60
Enregistré le : 13 sept. 2016, 12:10
Contact :

Re: programmation simple filtration piscine ou autre

Message par acuponctus »

Bonjour et merci à tous les deux,

J'ai rajouté des logs, cependant le résultat ne m'affiche pas tout, 5 variables sur les 7 demandes.
Il manque le résultat de cette partie print ((t1>=fd),(t1<=ff))

pour :

Code : Tout sélectionner

t1 = os.date("01:00")
print ("--- debut script ---");
local fd = uservariables["Filtration-debut"]
local ff = uservariables["Filtration-fin"]
local mo = otherdevices['Maison occupée']
local fp = otherdevices['Filtration Piscine - 108']
print (t1, fd, ff, mo, fp)
print ((t1>=fd),(t1<=ff))
j'ai ça dans les logs

Code : Tout sélectionner

2020-01-15 10:38:09.580 Status: LUA: 01:00
2020-01-15 10:38:09.580 Status: LUA: 22:00
2020-01-15 10:38:09.580 Status: LUA: 06:00
2020-01-15 10:38:09.581 Status: LUA: Off
2020-01-15 10:38:09.581 Status: LUA: Off
Je poursuis mes tests
ABOX Raspberry Pi 3 Modèle B Plus
domoticz V2020.2 - Stick Aeon - 3x multisensors 6+ - Fibaro FGSD-002 - 6 prises Horsky flashées - 2x cameras sv3c et 1x wansview - 3xTH16 2xBasic et 1xRF tous flashés avec EasyESP

acuponctus
Messages : 60
Enregistré le : 13 sept. 2016, 12:10
Contact :

Re: programmation simple filtration piscine ou autre

Message par acuponctus »

Suite :

Avec des logs partout j'ai pu trouver l'erreur, et il s'agissait pour d'un mauvais caractère...
Ou plutôt d'un caractère en trop ! Deux espace entre "maison" et "occupée" au lieu d'un seul dans le script...

Point bénéfique j'ai appris la création et l'utilisation de variables locales que je vais désormais utiliser pour les test, merci boum.

Pour la partie changement d'état avec le nom de la variable local, ça doit se faire de quelle manière :
commandArray['Variable:fp'] = 'Off'
commandArray['Variable:' ..fp] = 'Off'
?
Car je n'y parviens pas non plus.

fp étant le nom du switch virtuel qui donne bien une valeur On ou Off.

Merci !
ABOX Raspberry Pi 3 Modèle B Plus
domoticz V2020.2 - Stick Aeon - 3x multisensors 6+ - Fibaro FGSD-002 - 6 prises Horsky flashées - 2x cameras sv3c et 1x wansview - 3xTH16 2xBasic et 1xRF tous flashés avec EasyESP

denis_brasseur
Messages : 511
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: programmation simple filtration piscine ou autre

Message par denis_brasseur »

L'utilisation de

Code : Tout sélectionner

commandArray['Variable:fp'] = 'Off'
est réservé à la gestion des variables utilisateur, et non pas locale.

Code : Tout sélectionner

local fp = otherdevices['Filtration Piscine - 108']
Je pense comprendre que tu veux écrire

Code : Tout sélectionner

commandArray['Filtration Piscine - 108'] = 'Off'
Il te faut alors définir une variable locale

Code : Tout sélectionner

local var_fp = 'Filtration Piscine - 108'
que tu utilisera comme ceci

Code : Tout sélectionner

commandArray[var_fp] = 'Off'
tu peux également faire ceci

Code : Tout sélectionner

local var_fp = 'Filtration Piscine - 108'
local fp = otherdevices[var_fp']
if otherdevices[var_fp] == 'On' then
    commandArray[var_fp] = 'Off'
end
ou bien

Code : Tout sélectionner

local var_fp = 'Filtration Piscine - 108'
local fp = otherdevices[var_fp']
if fp == 'On' then
    commandArray[var_fp] = 'Off'
end
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

denis_brasseur
Messages : 511
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: programmation simple filtration piscine ou autre

Message par denis_brasseur »

denis_brasseur a écrit :
15 janv. 2020, 19:12
L'utilisation de

Code : Tout sélectionner

commandArray['Variable:fp'] = 'Off'
est réservé à la gestion des variables utilisateur, et non pas locale.

Code : Tout sélectionner

local fp = otherdevices['Filtration Piscine - 108']
Je pense comprendre que tu veux écrire

Code : Tout sélectionner

commandArray['Filtration Piscine - 108'] = 'Off'
Il te faut alors définir une variable locale

Code : Tout sélectionner

local var_fp = 'Filtration Piscine - 108'
que tu utilisera comme ceci

Code : Tout sélectionner

commandArray[var_fp] = 'Off'
tu peux ainsi faire ceci

Code : Tout sélectionner

local var_fp = 'Filtration Piscine - 108'
local fp = otherdevices[var_fp']
if otherdevices[var_fp] == 'On' then
    commandArray[var_fp] = 'Off'
end
ou bien

Code : Tout sélectionner

local var_fp = 'Filtration Piscine - 108'
local fp = otherdevices[var_fp']
if fp == 'On' then
    commandArray[var_fp] = 'Off'
end
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

acuponctus
Messages : 60
Enregistré le : 13 sept. 2016, 12:10
Contact :

Re: programmation simple filtration piscine ou autre

Message par acuponctus »

Merci beaucoup denis_brasseur !
effectivement c'est plus facile par la suite en cas de modification du nom du switch.
ABOX Raspberry Pi 3 Modèle B Plus
domoticz V2020.2 - Stick Aeon - 3x multisensors 6+ - Fibaro FGSD-002 - 6 prises Horsky flashées - 2x cameras sv3c et 1x wansview - 3xTH16 2xBasic et 1xRF tous flashés avec EasyESP

Répondre