Script de Givre full auto ou presque
Publié : 18 janv. 2017, 16:48
Salut,
Je presque fini de modifier le script de givre de Papoo, mon idée est qu'il ce met en route la veille pour nous prévenir de couvrir la voiture :
- Pour cela je vais parser le Json de forcast.io (Darksky) et demande les prévision pour dans 12h (le script va de mettre en route a 18h30)
Les "Problemes" ont été corriger, ce script est fonctionnel.
Merci a Papoo
Je presque fini de modifier le script de givre de Papoo, mon idée est qu'il ce met en route la veille pour nous prévenir de couvrir la voiture :
- Pour cela je vais parser le Json de forcast.io (Darksky) et demande les prévision pour dans 12h (le script va de mettre en route a 18h30)
Code : Tout sélectionner
--~/domoticz/scripts/lua/script_time_givre.lua
--auteur : papoo&deennoo
--version : on s'en fiche
--MAJ : 18/01/2017
--création : 06/05/2016
--Principe :
--a une heure donnée, va chercher les previsions de temperature pour dans 12h puis va calculer
--le point de givre
--puis en comparant ensuite le point de givre et la température reçue, création d'une alerte givre.
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local dew_point_idx = -- idx de l'éventuel dummy température point de rosée si vous souhaitez le suivre
local freeze_point_idx = -- idx du dummy température point de givre
local freeze_alert_idx = -- idx du dummy alert point de givre
local heure =18 ---heure de declenchement
local minute =35 -- minute de declenchement
local api ="garderlesguillemets"
local long =votre longitude
local lat =votre latitude
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
--parser le json forcast io
json = (loadfile "/home/votrenomutilisé/domoticz/scripts/lua/JSON.lua")() -- For Linux
--json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- for PI
--json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")() -- For Syno
commandArray = {}
now=os.date("*t")
if (now.min == minute and now.hour == heure) then
--if now.min % 1 == 0 then -- toutes les minutes
config=assert(io.popen('/usr/bin/curl https://api.forecast.io/forecast/'..api..'/'..lat..','..long..'?units=ca&exclude=currently,minutely,daily,alerts,flags'))
blocjson = config:read('*all')
config:close()
jsonValeur = json:decode(blocjson)
temp = jsonValeur.hourly.data[12].apparentTemperature
dew = jsonValeur.hourly.data[12].dewPoint
--print('temp: '..temp..' dew: '..dew)
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s, debbuging)
if (debugging) then
if s ~= nil then
print ("<font color='#f3031d'>".. s .."</font>");
else
print ("<font color='#f3031d'>aucune valeur affichable</font>");
end
end
end
function freezing_point(d, t)
if d > 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 = d + 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("=========== Point de rosee et point de givrage (v1.0) ===========",debugging)
voir_les_logs("--- --- --- Temperature Ext : ".. temp,debugging)
voir_les_logs("--- --- --- Point de Rosee : ".. dew,debugging)
if dew ~= nil and temp ~= nil then
if dew_point_idx ~= nil then
commandArray[1] = {['UpdateDevice'] = dew_point_idx .. "|0|" .. dew} -- Mise à jour point de rosee
end
FreezingPoint = freezing_point(dew, tonumber(temp))
if FreezingPoint ~= nil then
voir_les_logs("--- --- --- Point de Givrage : ".. FreezingPoint,debugging)
if freeze_point_idx ~= nil then
commandArray[2] = {['UpdateDevice'] = freeze_point_idx .. "|0|" .. FreezingPoint} -- Mise à jour point de givrage
end
if(tonumber(temp)<=1 and tonumber(FreezingPoint)<=0)then
voir_les_logs("--- Givre Demain Matin ---",debugging)
commandArray[3]={['UpdateDevice'] = freeze_alert_idx..'|4|'..FreezingPoint}
commandArray['SendNotification'] = 'Alert#Presence de givre demain matin!'
elseif(tonumber(temp)<=3 and tonumber(FreezingPoint)<=0)then
voir_les_logs("--- Risque de Givre Demain Matin ---",debugging)
commandArray[3]={['UpdateDevice'] = freeze_alert_idx..'|2|'..FreezingPoint}
commandArray['SendNotification'] = 'Alert#Risque de givre demain matin!'
else
voir_les_logs("--- --- --- Aucun risque de Givre --- --- ---",debugging)
commandArray[3]={['UpdateDevice'] = freeze_alert_idx..'|1|'..'Pas de givre'}
voir_les_logs("=========== Fin Point de rosee et point de givrage (v1.0) ===========",debugging)
end
else
voir_les_logs("=========== La temperature du point de rosee est superieure a la temperature. Puisque la temperature du point de rosee ne peut etre superieure a la temperature de l'air , l\'humidite relative a ete fixee à nil ===========",debugging)
if tonumber(dew)<= -5 then
voir_les_logs("--- Risque de Givre Demain Matin ---",debugging)
commandArray[3]={['UpdateDevice'] = freeze_alert_idx..'|2|'..FreezingPoint}
commandArray['SendNotification'] = 'Alert#Risque de givre demain matin!'
end
end
else
voir_les_logs("=========== Calcul du Point de rosee et du point de givrage impossible aucune donnee a traiter ===========",debugging)
end
end
return commandArray
Les "Problemes" ont été corriger, ce script est fonctionnel.
Merci a Papoo