Script de Givre full auto ou presque

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Guigui
Messages : 86
Inscription : 12 sept. 2015, 16:19

Re: Script de Givre full auto ou presque

Message par Guigui »

merci du conseil voici mes modifs pour ceux qui souhaitent

Code : Tout sélectionner

--- config=assert(io.popen(curl ..'"https://api.forecast.io/forecast/'.. api ..'/'.. lat ..','.. long ..'?units=ca&exclude=currently,minutely,daily,alerts,flags"'))

config=assert(io.popen(curl ..'"https://api.openweathermap.org/data/2.5/onecall?lat='.. lat ..'&lon='.. long ..'&units=metric&exclude=minutely,daily&lang=fr&appid='.. api ..'"'))

---	temp  = jsonValeur.hourly.data[11].apparentTemperature
---	dew   = jsonValeur.hourly.data[11].dewPoint

temp = jsonValeur.hourly[11].temp
dew = jsonValeur.hourly[11].dew_point





bien penser à mettre votre nouvelle clé API openweathermap..



Merci a tous =)
FanoSD
Messages : 1
Inscription : 09 janv. 2024, 18:31

Re: Script de Givre full auto ou presque

Message par FanoSD »

Bonjour,

Meilleurs vœux pour cette nouvelle année.

Est il possible d'avoir le script final qui tourne bien avec OpenWeatherMap.

J'ai essayé, mais j'arrive à cette erreur là :

2024-01-09 18:25:03.318 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_givre.lua: /home/pi/domoticz/scripts/lua/script_time_givre.lua:52: attempt to index a nil value (global 'jsonValeur')
Domoticz : Version 2023.2
RFXCOM : RFXtrx433 USB
Zigbee : zigate V1 USB
TeleInfo : FT230x USB
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Script de Givre full auto ou presque

Message par Keros »

Bonjour FanoSD et bienvenu sur le forum :)

Je ne suis adepte de passer les scripts tout fait. Je l'explique dans ma présentation (lien en signature).

Néanmoins, j'ai écrit un tutoriel [LUA-DzVents] Données Météo avec API Openweathermap qui devrait t'aider à comprendre comment cela fonctionne.
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
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Script de Givre full auto ou presque

Message par Neutrino »

J'ai un truc qui tourne.
C'est le seul script non DzVents qu'il me reste :mrgreen:

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 = 334 -- idx de l'éventuel dummy température point de rosée si vous souhaitez le suivre
local freeze_point_idx = 335-- idx du dummy température point de givre
local freeze_alert_idx = 336-- idx du dummy alert point de givre
local heure =18 ---heure de declenchement
local minute =05 -- minute de declenchement
local api ="052146845MaCleAPI5641" --Openweathermap

local long = -1.0000
local lat = 46.0000


--------------------------------------------
----------- Fin variables à éditer ---------
-------------------------------------------- 
--parser le json forcast io
--json = (loadfile "/home/votrenomutilisé/domoticz/scripts/lua/JSON.lua")() -- For Linux
json = (loadfile "/home/neutrino/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.openweathermap.org/data/2.5/onecall?lat='..lat..'&lon='..long..'&appid='..api..'"'))
blocjson = config:read('*all')
config:close()
jsonValeur = json:decode(blocjson)
temp = jsonValeur.hourly[13].temp - 273.15
dew = jsonValeur.hourly[13].dew_point - 273.15
--dew = 10
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)<=1)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)<=1)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
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Script de Givre full auto ou presque

Message par Keros »

Attention, ce script est pour l'ancienne API 2.5. Elle est toujours fonctionnelle, mais si tu t'inscris aujourd'hui, la clé API que tu auras ne te permettra pas d'utiliser l'ancienne OneCall 2.5. Il faudra adapter pour la nouvelle.
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
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Script de Givre full auto ou presque

Message par Neutrino »

En effet !
J'avais oublié cette subtilité.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Répondre