Page 1 sur 1

[LUA] Controler un store automatiquement

Publié : 06 juin 2015, 10:20
par deennoo
Bonjour,

EDITER LE 01/07/2015
- ajout d'une condition d'heure mini d 'ouverture (j'ai mon store qui c'est ouvert cette nuit a 00:01 car il faisait plus chaud dehors que dedans)
EDITER LE 26/06/2015
-Correction de synthaxe pour la gestion des plages horaires
EDITER LE 18/06/2015
- Ajout de la la conditions d'heure pour une ouverture (non pas en appellant Time mais Hours = time efface les 0 si il est 09:02 il affichera 92)
EDITER LE 09/06/2015
- Rajout de la couverture nuageuse prevu aujourd hui
- Rajout d'une condition de l'etat du store pour l'ouverture ou la fermeture
- Rajout de plein de print pour faire le debugage

Voici mon premier script, realiser avec l'aide Patrice et de Vil1driver qui a pour but de controler l'ouverture et la fermeture d'un store en fonction de :

La temperature interieur par rapport a la temperature exterieur
Du Vent
Du risque de Pluie
De la tendance journaliere prevu par Forcastio
De l'heure
de la position actuel du store (ouvert ou ferme)
a mettre en place de la presence du quelqu'un dans la maison = abandon de cette contrainte car le but est de garder la fraicheur meme si il n y a personne a l'instant T

crée un faux capteur de temperature qui fait un differentiel entre la temperature exterieur et interieur, il a été cree en suivant ce topic : viewtopic.php?f=17&t=97 il ne faut cree que le capteur de temperature, dans mon script il s'appelle Deltat

J'utilise les valeurs de vent que me donne mon anémometre Oregon WGR800, dans mon script il s'appelle anemometre, une valeur en temps reel est tres importante dans mon cas, car le store ne supporte pas une vitesse de vent de plus de 27km/h ou 7.5m/s, Domoticz traduit les données de l'anémometre ainsi 27km/h = 7.5m/s = 75.

Cree un device de prevision meteo en suivant ce topic : http://easydomoticz.com/tag/forecast-io/ dans mon cas le script est appeller une fois par jour a 6h du matin et demande les infos pour midi (soit 6h plus tard = offset = 6),
il me permet de connaitre : La tendance (ensoleillé, nuageux, etc etc).

j'ai egalement cree un device pour la prevision de pluie dans 1h, ce script est appeler toutes les heures toujours avec forcast io

J'ai ajouter la notion d'heure car dans mon cas, a 19h00 le store n'a plus de raison d'etre ouvert, le soleil étant de l'autre coté de la maison, a 19h00 le store ce referme seul

sur mon store j'ai placer un detecteur d'ouverture chacon qui me permet de savoir si le store est deja ouvert ou non, si oui pas besoin de l ouvrir, si non : on l ouvre

pour les neophyte tout ce qui est ['mot ou nom'] c'est le capteur, l'orthographe doit etre la meme que celle qui apparait dans domoticz

chez moi il s'appelle script_time_store.lua, ainsi il est executé toute les minutes, il est placer dans home\pi\domoticz\scripts\lua

comme c'est le premier, un peu d'indugence SVP

Code : Tout sélectionner

commandArray = {}
print("----------------------------------------")
------les etats des devices-----

--recupere l'heure
time=os.time()
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))
print("il est " .. hours .. minutes) 



--donnée de l'anemometre
Wb, Wd, Ws, Wg = otherdevices_svalues['Anemometre']:match("([^;]+);([^;]+);([^;]+);([^;]+)")
Wb = tonumber(Wb)
Ws = tonumber(Ws)
Wg = tonumber(Wg)
print("Vitesse du Vent " ..  Ws)
print("Vitesse Rafale " ..  Wg)

--etat du store
etat = otherdevices_svalues['PIR Store']:match("([^;]+)")
etat = tonumber (etat)
if etat  > 1  then
	print ("Store ouvert")
elseif etat  < 1 then
	print ("Store fermé")
end

--delta temperature
Deltat = otherdevices_svalues['Delta_T']:match("([^;]+)")
Deltat = tonumber(Deltat)
if Deltat  > 0 then
	print("Il fait plus chaud dehors que dedans de + " ..  Deltat)
elseif Deltat  < 0 then
	print("Il fait plus froid dehors que dedans de  " ..  Deltat)
end

--tendance nuageuse
print("---")
print("aujourd hui")
Temp, Hum, type, baro, tendance = otherdevices_svalues['Aujourd hui']:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
Temp = tonumber(Temp)
Hum = tonumber(Hum)
type = tonumber(type)
baro = tonumber(baro)
tendance = tonumber(tendance)
print("temperature " ..  Temp)
print("Humidité " ..  Hum)
print("baro " ..  baro)
if type  == 1 then
	print("temps sec")
elseif type  == 2 then
	print("temps confortable")
elseif type  == 3 then
	print("temps humide")
end
if tendance  == 1 then
	print("ensoleilé")
elseif tendance  == 2 then
	print("Partiellement nuageux")
elseif tendance  == 3 then
	print("Nuageux")
elseif tendance  == 4 then
	print("Pluvieux")
end
print("---")

--pluie
pluie = otherdevices_svalues['Pluie dans 1 Heure']:match("([^;]+)")
pluie = tonumber (pluie)
print("% de chance de pluie dans 1H : " ..  pluie)



------la regle-----
--pour la fermeture----
--si l'une des conditions n'est pas rempli, la regle continue
--d'abord le vent
if (Ws  >= 75 or Wg  >= 75 and etat  > 1) then
	commandArray['Store Terrasse']='Off'
	print("Trop de vent pour ouvrir le store")

--ensuite la pluie
elseif (pluie  >= 75 and etat  > 1) then
	commandArray['Store Terrasse']='Off'
	print("il va pleuvoir, On ferme")

	
--puis l'heure de fermeture
 elseif (hours  == 19 and minutes == 0 and etat  > 1) then
	commandArray['Store Terrasse']='Off'
	print("ALLEZ HOP IL EST TARD  ON FERME, TOUT LE MONDE DEDANS !!")

--pour l'ouverture--
--si aucune des conditions qui doivent fermer le store n'est rempli, on peut l'ouvrir si il fait beau si il fait plus chaud dehors que dedans et si le store est fermé.
--la temperature + la tendance
elseif (hours  <= 18 and hours  >= 6 and minutes  <= 59 and Deltat  > 0 and etat  <= 1 and pluie  <= 75) then 
	print("Il fait beau et chaud, Ouvrons le store")
	commandArray['Store Terrasse']='On'
end
print("----------------------------------------")
return commandArray


Re: LUA : Controler un store automatiquement

Publié : 25 juin 2015, 12:09
par deennoo
Je rencontre un probleme, ma variable de temps ne fonctionne pas, je m explique :

Je souhaite que a 19h le store ce ferme si il est ouvert et ce quelque soit la valeur du Delta T

Seulement le store ce ferme et ensuite ce reouvre car il fait toujours plus chaud dehors que dedans...j ai essayer de mettre une condition de temps a l ouverture ce cette facon

Code : Tout sélectionner

elseif time  =< 1859 then 

mais cela ne fonctionne pas et ne déclenche même pas le store en journée.

j'ai rechercher de la doc sur les LUA et le conditions de temps mais je ne trouve rien qui fonctionne.

si un correcteur veut bien ce donner la peine de m'aiguiller je suis preneur.

Re: LUA : Controler un store automatiquement

Publié : 25 juin 2015, 12:42
par vil1driver
salut,

rapidement je dirais de remplacer ceci:

Code : Tout sélectionner

hours  >= 191 and etat  > 1
par ceci

Code : Tout sélectionner

hours  == 19 and minutes == 0 and etat  > 1
:p

Re: LUA : Controler un store automatiquement

Publié : 25 juin 2015, 17:02
par deennoo
j essaye ce soir et je te dis.

déja l ouverture auto fonctionne, alors qu'avec la verbose elle ne fonctionnait pas

Merci

Re: LUA : Controler un store automatiquement

Publié : 26 juin 2015, 08:53
par deennoo
Cela fonctionne nickel, j'ai mis a jour le code du 1er post.

Merci