Bonjour,
je cherche à mettre en place le script EVP à partir des données météo darsky car je ne dispose pas d'une station météo.
Pour le moment, j'ai pu adapter le script pour récupérer les valeurs météos, mais je ne comprends pas certains points (désolé je suis un peu novice).
local dev_Rain="Pluie" est-ce que je prends la valeur Rain donnée par dasky ?
local dev_EVP="EVP" D'où vient cette valeur ?
-- Uservariables
local uvar_Rain='RFU_lastRain'
local uvar_EVP='RFU_lastEVP'
local uvar_RU='RFU_RU'
Comment modifier ces valeurs à partir de mes propres paramètres ?
Merci pour votre aide.
Script EVP avec API météo
Re: Encore un arrosage automatique !
Bonjour Combo et bienvenue sur le forum
Je viens de déplacer ton message dans un nouveau sujet.
Pour info, l'API Darksky devrait s'arréter d'ici peu : Apple rachète Dark Sky, une app de météo
Tu peux regarder du côté d'OpenWeaterMap : j'ai écrit un tuto dessus pour l'utiliser (voir ma signature). Mais le principe pour récupérer l'info d'un Json est également valable pour Darksky.
Maintenant, les données météo ne sont pas forcément précises.
Je viens de déplacer ton message dans un nouveau sujet.
Pour info, l'API Darksky devrait s'arréter d'ici peu : Apple rachète Dark Sky, une app de météo
Tu peux regarder du côté d'OpenWeaterMap : j'ai écrit un tuto dessus pour l'utiliser (voir ma signature). Mais le principe pour récupérer l'info d'un Json est également valable pour Darksky.
Maintenant, les données météo ne sont pas forcément précises.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Script EVP avec API météo
@Keros : Pourquoi avoir déplacé dans un nouveau sujet alors que les questions portent sur le script du sujet initial ?
A propos de darksky, comme mentionné par Keros, il va s'arrêter à l'été
Donc pour un nouveau projet, partir plutôt sur openweathermap même si, actuellement, la fiabilité est moins bonne ; espérons qu'ils s'amélioreront avec le temps.
Après, si tu veux uniquement l'EVP, tu peux utiliser le script suivant, plus simple car extrait du script global. Celui-ci ne s'occupe QUE de calculer l'EVP, et pas de gérer l'arrosage :
A propos de darksky, comme mentionné par Keros, il va s'arrêter à l'été
Il te faut un device de type "pluviomètre". Que celui-ci soit alimenté par une station météo ou un site web ne change rien, mais il doit être de type "Rain" dans la liste des équipementlocal dev_Rain="Pluie" est-ce que je prends la valeur Rain donnée par dasky ?
Dans ton domoticz, tu dois créer un autre device de type pluiviomètre pour recevoir le résultat du calcul de l'évaporation. Tu l'appelle comme tu veux et tu met son nom ici. Moi, j'avais choisi de l'appeler "EVP"local dev_EVP="EVP" D'où vient cette valeur ?
De même, tu dois créer 3 variables utilisateurs de type "décimal". Soit tu leur donne les mêmes noms que moi ("RFU_lastRain", etc), soit tu donnes tes propres noms et tu les renseignes dans cette partie du scriptlocal uvar_Rain='RFU_lastRain'
local uvar_EVP='RFU_lastEVP'
local uvar_RU='RFU_RU'
Après, si tu veux uniquement l'EVP, tu peux utiliser le script suivant, plus simple car extrait du script global. Celui-ci ne s'occupe QUE de calculer l'EVP, et pas de gérer l'arrosage :
Code : Tout sélectionner
-- Script to estimate potential evapotranspiration according to Penman Monteith formula and FAO-56 method
-- Weather sensors for EVP
local dev_THB="Conditions extérieures" -- Outside temperature (°C), relative humidity (%) and Atmospheric pressure (hPa)
local dev_Rn= "Lux" -- Global sun radiation (lux)
local cst_G = 0 -- Thermal flux to the ground (MJ/h/m²)
local dev_U = "Vent" -- Wind speed
local cst_h = 5 -- height of wind speed mesurement (m)
-- EVP sensor (must be of type rain sensor)
local dev_EVP="EVP"
local debug=false
local frequency_EVP=1 -- script runs every 1 min with local wind meter; can be slowed down to 1h with stabile wind measurements
function UpdateDev(device,nvalue,svalues)
-- Update a domoticz device
if device~=nil then
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[device]..'|'..tostring(nvalue)..'|'..tostring(svalues)}
end
end
commandArray = {}
time = os.date("*t")
if (time.min % frequency_EVP)==0 then -- Run every "frequency_EVP" minutes.
--Constants
Cn=37 --Hourly steps...
if (timeofday['Daytime']) then
Cd=0.24 --at day and 0.96 at night !!
else
Cd=0.96
end
if debug then print("Cd="..tostring(Cd)) end
-- reading of sensors
P =otherdevices_barometer[dev_THB] -- hPa
T =otherdevices_temperature[dev_THB] -- °C
Hr=otherdevices_humidity[dev_THB] -- %
Rn=otherdevices_svalues[dev_Rn]*0.0079 -- W/m²
U2=otherdevices_windspeed[dev_U] -- m/s
if debug then
print("Pressure "..tostring(P).." hPa")
print("Temperature "..tostring(T).." °C")
print("Relative humidity "..tostring(Hr).." %")
print("Solar irradiance "..tostring(Rn).." W/m²")
print("Wind speed "..tostring(U2*3.6).." km/h") -- Wind speed is internally stored in m/s
end
-- unit convertions
P=P/10 -- must be in kPa
Hr=Hr/100
Rn=Rn/277.77778 -- must be in MJ/h/m²
U2=U2*4.87/math.log(67.8*cst_h-5.42) -- windspeed at 2m height, in m/s
-- Intermediates calculations
Esat=0.6108*math.exp(17.27*T/(T+237.3)) -- saturated vapor pressure (kPa)
Ea =Hr*Esat -- current vapor pressure (kPa)
Delta=4098*Esat/((T+237.3)^2)
Gamma=0.665*P/1000
if debug then
print("Pressure of saturated vapor "..tostring(Esat).." kPa")
print("Pressure of actual vapor "..tostring(Ea).." kPa")
print("Delta "..tostring(Delta))
print("Gamma "..tostring(Gamma))
end
ET0=(0.408*Delta*(Rn-cst_G)+Gamma*Cn/(T+273)*U2*(Esat-Ea))/(Delta+Gamma*(1+Cd*U2)) -- EVP in mm/h
if debug then print("ET0 "..tostring(ET0).." mm/h") end
-- Updating the counter
-- EVP_Act=otherdevices_rain[dev_EVP] buggy :( Get an offset at midnight
rate, EVP_Act = string.match(otherdevices_svalues[dev_EVP],"(.-);(.-)$")
if debug then
print("rate "..tostring(rate))
print("EVP_Act "..tostring(EVP_Act))
print("EVP Ct b4 "..otherdevices_svalues[dev_EVP])
end
svalue=tostring(ET0)..";"..tostring(EVP_Act+ET0*frequency_EVP/60)
UpdateDev(dev_EVP,0,svalue)
end
return commandArray
Re: Script EVP avec API météo
J'ai compris qu'il faisait une utilisation détournée du script et j'ai pensé qu'elle méritait un sujet dédié.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos