Qu’il est désagréable de sortir à la bourre le matin pour embaucher et se retrouver avec un par-brise à dégivrer.
Suite à ce constat il me fallait trouver une solution à ce problème.
comment connaitre le point de givre ? et comment m’avertir d’un probable pare-brise gelé?
tout d’abord, la définition du point de givrage d’après Wikipédia
Le point de givrage, connu également comme la température du point givrage ou le point de gelée, est une donnée météorologique calculée à partir de l’humidité, la pression et la température. Le point de givrage de l’air est la température à laquelle, tout en gardant inchangées les conditions barométriques courantes, l’air devient saturé de vapeur d’eau par rapport à la glace. Le point de givrage est donc l’équivalent du point de rosée pour la condensation de la vapeur d’eau directement en cristaux de glace et non en micro-gouttelettes. C’est le phénomène de déposition, qui survient lorsque le point de givre est atteint, qui crée la gelée blanche.
Il nous faut donc dans un premier temps calculer le point de rosée nécessaire au calcul du point de givrage.
la formule du point de rosée.
function dewPoint (T, RH) local b,c = 17.67, 243.5 RH = math.max (RH or 0, 1e-3) local gamma = math.log (RH/100) + b * T / (c + T) return c * gamma / (b - gamma) end
et maintenant la formule point de givrage
function freezing_point(dp, t) T = t + 273.15 Td = dp + 273.15 return (Td + (2671.02 /((2954.61/T) + 2.193665 * math.log(T) - 13.3448))-T)-273.15 end
le script complet pour Domoticz
--[[ ~/domoticz/scripts/lua/script_device_givre.lua auteur : papoo MAJ : 28/02/2018 création : 06/05/2016 Principe : Calculer via les informations température et hygrométrie d'une sonde extérieure le point de rosée ainsi que le point de givre puis en comparant ensuite le point de givre et l'a température extérieure, création d'une alerte givre.script calcul et alerte givrehttp://easydomoticz.com/forum/viewtopic.php?f=21&t=1085&start=10#p17545 https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_device_givre.lua --]] -------------------------------------------- ------------ Variables à éditer ------------ -------------------------------------------- local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir local temp_ext = 'Temperature exterieure' -- nom de la sonde de température/humidité extérieure local dev_dew_point = 'Point de rosée' -- nom de l'éventuel dummy température point de rosée si vous souhaitez le suivre sinon nil local dev_freeze_point = 'Point de givrage' -- nom de l'éventuel dummy température point de givre si vous souhaitez le suivre sinon nil local dev_freeze_alert = 'Risque de givre' -- nom de l'éventuel dummy alert point de givre si vous souhaitez le suivre sinon nil -------------------------------------------- ----------- Fin variables à éditer --------- -------------------------------------------- local nom_script = 'Point de rosée et point de givrage' local version = 1.13 -- version du script commandArray = {} time=os.date("*t") --if time.min % 2 == 0 then -- si script_time if devicechanged[temp_ext] then -- si script_device --print("script_device_givre.lua") -------------------------------------------- ---------------- Fonctions ----------------- -------------------------------------------- function voir_les_logs (s, debugging) if (debugging) then if s ~= nil then print ("".. s ..""); else print ("aucune valeur affichable"); end end end function round(value, digits) if not value or not digits then return nil end local precision = 10^digits return (value >= 0) and (math.floor(value * precision + 0.5) / precision) or (math.ceil(value * precision - 0.5) / precision) end function dewPoint (T, RH) local b,c = 17.67, 243.5 RH = math.max (RH or 0, 1e-3) local gamma = math.log (RH/100) + b * T / (c + T) return c * gamma / (b - gamma) end function freezing_point(dp, t) if not dp or not t or dp > t then return nil, " La température du point de rosée est supérieure à la température. Puisque la température du point de rosée ne peut être supérieure à la température de l'air , l\'humidité relative a été fixée à nil." end T = t + 273.15 Td = dp + 273.15 return (Td + (2671.02 /((2954.61/T) + 2.193665 * math.log(T) - 13.3448))-T)-273.15 end -------------------------------------------- -------------- Fin Fonctions --------------- -------------------------------------------- voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging) Temp, Humidity = otherdevices_svalues[temp_ext]:match("([^;]+);([^;]+)") voir_les_logs("--- --- --- Température Ext : ".. Temp,debugging) voir_les_logs("--- --- --- Humidité : ".. Humidity,debugging) if dev_dew_point ~= nil then DewPoint = round(dewPoint(Temp,Humidity),2) voir_les_logs("--- --- --- Point de Rosée : ".. DewPoint,debugging) commandArray[1] = {['UpdateDevice'] = otherdevices_idx[dev_dew_point] .. "|0|" .. DewPoint} -- Mise à jour point de rosée end if dev_freeze_point ~= nil then FreezingPoint = round(freezing_point(DewPoint, tonumber(Temp)),2) voir_les_logs("--- --- --- Point de Givrage : ".. FreezingPoint,debugging) commandArray[2] = {['UpdateDevice'] = otherdevices_idx[dev_freeze_point] .. "|0|" .. FreezingPoint} -- Mise à jour point de givrage end if dev_freeze_alert ~= nil then if(tonumber(Temp)<=1 and tonumber(FreezingPoint)<=0) then voir_les_logs("--- --- --- Givre --- --- ---",debugging) commandArray[3]={['UpdateDevice'] = otherdevices_idx[dev_freeze_alert]..'|4|'..FreezingPoint} if (time.min == 50 and time.hour == 6) then commandArray['SendNotification'] = 'Alert#Présence de givre!' end elseif(tonumber(Temp)<=3 and tonumber(FreezingPoint)<=0)then voir_les_logs("--- --- --- Risque de Givre --- --- ---",debugging) commandArray[3]={['UpdateDevice'] = otherdevices_idx[dev_freeze_alert]..'|2|'..FreezingPoint} if (time.min == 50 and time.hour == 6) then commandArray['SendNotification'] = 'Alert#Risque de givre!' end else voir_les_logs("--- --- --- Aucun risque de Givre --- --- ---",debugging) commandArray[3]={['UpdateDevice'] = otherdevices_idx[dev_freeze_alert]..'|1|'..'Pas de givre'} end end voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging) end return commandArray
Retrouver la derniere version de ce script sur [homepage]https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_device_givre.lua[/homepage]
Nouvelle version du script 1.1 pour correction multi alertes (une seule alerte à 6h50)