first commit
This commit is contained in:
143
lua/old/script_time_DewPoint.old
Executable file
143
lua/old/script_time_DewPoint.old
Executable file
@@ -0,0 +1,143 @@
|
||||
--[[
|
||||
~/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.
|
||||
http://pon.fr/script-calcul-et-alerte-givre/
|
||||
http://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 ------------
|
||||
--------------------------------------------
|
||||
require "scripts/lua/functions"
|
||||
|
||||
local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
|
||||
local temp_ext = 'BarometreLaGacilly' -- nom de la sonde de température/humidité extérieure
|
||||
local dev_dew_point = 'Point de rosee' -- nom de l'éventuel dummy température point de rosée si vous souhaitez le suivre sinon nil
|
||||
local dev_freeze_point = 'Point de givre' -- nom de l'éventuel dummy température point de givre si vous souhaitez le suivre sinon nil
|
||||
local dev_hum_abs_point = nil -- nom de l'éventuel dummy humidité absolue si vous souhaitez le suivre sinon nil
|
||||
local dev_freeze_alert = 'Alerte 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.2 -- version du script
|
||||
|
||||
commandArray = {}
|
||||
|
||||
--------------------------------------------
|
||||
---------------- Fonctions -----------------
|
||||
--------------------------------------------
|
||||
function voir_les_logs (s, debugging)
|
||||
if (debugging) then
|
||||
if s ~= nil then
|
||||
debug ("<font color='#f3031d'>".. tostring(s) .."</font>");
|
||||
else
|
||||
debug ("<font color='#f3031d'>aucune valeur affichable</font>");
|
||||
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
|
||||
--voir_les_logs("--- 1",debugging)
|
||||
RH = math.max (tonumber(RH), 1e-3)
|
||||
--voir_les_logs("--- 1",debugging)
|
||||
local gamma = math.log (tonumber(RH)/100) + b * T / (c + T)
|
||||
--voir_les_logs("--- 1",debugging)
|
||||
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
|
||||
|
||||
function hum_abs(t,hr)
|
||||
-- https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/
|
||||
-- Formule pour calculer l'humidité absolue
|
||||
-- Dans la formule ci-dessous, la température (T) est exprimée en degrés Celsius, l'humidité relative (hr) est exprimée en%, et e est la base des logarithmes naturels 2.71828 [élevée à la puissance du contenu des crochets]:
|
||||
-- Humidité absolue (grammes / m3 ) = (6,122 * e^[(17,67 * T) / (T + 243,5)] * rh * 2,1674))/(273,15 + T)
|
||||
-- Cette formule est précise à 0,1% près, dans la gamme de température de -30 ° C à + 35 ° C
|
||||
ha = round((6.112 * math.exp((17.67 * t)/(t+243.5)) * hr * 2.1674)/ (273.15 + t),1)
|
||||
return ha
|
||||
end
|
||||
|
||||
--------------------------------------------
|
||||
-------------- Fin Fonctions ---------------
|
||||
--------------------------------------------
|
||||
|
||||
time=os.date("*t")
|
||||
if (time.min%15 == 0) then -- si script_time
|
||||
--if devicechanged[temp_ext] then -- si script_device
|
||||
--print("script_device_givre.lua")
|
||||
print('valeurs '..otherdevices_svalues[temp_ext]);
|
||||
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
|
||||
local dew = dewPoint(Temp,Humidity)
|
||||
voir_les_logs("--- --- --- Dew point calculated : ".. tostring(dew),debugging)
|
||||
DewPoint = round(dew,2)
|
||||
voir_les_logs("--- --- --- Point de Rosée : ".. DewPoint,debugging)
|
||||
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[dev_dew_point] .. "|0|" .. DewPoint} -- Mise à jour point de rosée
|
||||
end
|
||||
--voir_les_logs("--- 1",debugging)
|
||||
if dev_freeze_point ~= nil then
|
||||
FreezingPoint = round(freezing_point(DewPoint, tonumber(Temp)),2)
|
||||
voir_les_logs("--- --- --- Point de Givrage : ".. FreezingPoint,debugging)
|
||||
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[dev_freeze_point] .. "|0|" .. FreezingPoint} -- Mise à jour point de givrage
|
||||
end
|
||||
|
||||
--voir_les_logs("--- 2",debugging)
|
||||
if dev_hum_abs_point ~= nil then
|
||||
hum_abs_point = hum_abs(Temp, Humidity)
|
||||
voir_les_logs("--- --- --- Humidité absolue : ".. hum_abs_point,debugging)
|
||||
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[dev_hum_abs_point] .. "|0|" .. hum_abs_point} -- Mise à jour humidité absolue
|
||||
end
|
||||
|
||||
--voir_les_logs("--- 3",debugging)
|
||||
|
||||
if dev_freeze_alert ~= nil and time.hour == 7 and time.min >= 30 then
|
||||
if(tonumber(Temp)<=1 and tonumber(FreezingPoint)<=0) then
|
||||
voir_les_logs("--- --- --- Givre --- --- ---",debugging)
|
||||
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[dev_freeze_alert]..'|4|'..FreezingPoint}
|
||||
commandArray['SendNotification'] = 'Alert#Présence de givre!'
|
||||
elseif(tonumber(Temp)<=3 and tonumber(FreezingPoint)<=0)then
|
||||
voir_les_logs("--- --- --- Risque de Givre --- --- ---",debugging)
|
||||
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[dev_freeze_alert]..'|2|'..FreezingPoint}
|
||||
commandArray['SendNotification'] = 'Alert#Risque de givre!'
|
||||
else
|
||||
voir_les_logs("--- --- --- Aucun risque de Givre --- --- ---",debugging)
|
||||
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[dev_freeze_alert]..'|1|'..'Pas de givre'}
|
||||
end
|
||||
end
|
||||
voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
|
||||
end
|
||||
|
||||
return commandArray
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user