Re: [LUA] Quantité de précipitation avec OpenWeatherMap
Publié : 09 oct. 2022, 16:50
Salut,
J'ai mis en place le script de Vianncy, en modifiant bien sur les lignes a renseigner mais j'ai le message d'erreur suivant;
Ce script fonctionne toujours chez vous?
J'ai aussi essayé d'implanter celui de garrycooper donné un peu plus loin, et j'ai des erreurs aussi....
Voici mon code (sans clé d'api ni vraie position GPS)
Merci à ceux qui auront une idée du problème.....
J'ai mis en place le script de Vianncy, en modifiant bien sur les lignes a renseigner mais j'ai le message d'erreur suivant;
Code : Tout sélectionner
2022-10-09 16:32:00.571 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_prev_pluie.lua: /home/pi/domoticz/scripts/lua/script_time_prev_pluie.lua:30: attempt to concatenate a nil value (global 'scriptVersion')J'ai aussi essayé d'implanter celui de garrycooper donné un peu plus loin, et j'ai des erreurs aussi....
Voici mon code (sans clé d'api ni vraie position GPS)
Merci à ceux qui auront une idée du problème.....
Code : Tout sélectionner
local time = os.date("*t") -- Si vous souhaitez exécuté ce script toutes les X min
local start_hour = '06:00' -- Si vous souhaitez exécuté ce script tous les jours à 6h
local actual_hour = os.date("%H:%M")
local deuxHeuresDeviceIdx = 145
local quatreHeuresDeviceIdx = 146
local sixHeuresDeviceIdx = 147
local douzeHeuresDeviceIdx = 138
--------------------------------------------
----------- Variables à éditer -------------
--------------------------------------------
local api = '***********************************' -- Remplacer par votre clé API
local lat = '34.506387' -- Remplacer par ici votre latittude
local long = '-1.500000' -- Remplacer par votre longitude
--Sélectionner le chemin vers votre fichier JSON.lua en décommentant la ligne pour votre système d'exploitation
--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
--------------------------------------------
---------- Fin variables à éditer ----------
--------------------------------------------
commandArray = {}
log(scriptName.." "..scriptVersion.." - "..actual_hour)
log("heure: " ..time.hour)
-- Les script_time sont exécutés toute les 1 minute par Domoticz
-- Limite de l'API : 1000 appels/jour, il y a 1440 minutes/jour
-- A modifier si vous souhaitez toutes les 5, 10, 30, ... minutes (ici 20 minutes)
if (time.min % 20)==0 then -- pour exécuter le script toutes les X min
--if actual_hour==start_hour then -- pour exécuter le script à heure fixe
-- L'appel et l'enregistrement des prévisions dans la variable jsonValeur
config=assert(io.popen('/usr/bin/curl "https://api.openweathermap.org/data/2.5/onecall?lat='..lat..'&lon='..long..'&appid='..api..'&lang=fr&units=metric"'))
blocjson = config:read('*all')
config:close()
jsonValeur = json:decode(blocjson)
--------------------------------------------
---- Code à modifier selon vos besoins -----
--------------------------------------------
local somme = 0 -- Somme des quantité. Peut être placée en en-tête.
for i=1, 12 do --On parcourt les 12 prochaines heures.
if (jsonValeur.hourly[i].rain) then --Pluie prévue ?
somme = somme + jsonValeur.hourly[i].rain["1h"] --Si oui, on additionne la quantité annoncée à cette heure à la somme des quantités. Sinon, on ne fait rien.
end
if (jsonValeur.hourly[i].snow) then --Neige prévue ?
somme = somme + jsonValeur.hourly[i].snow["1h"] --Même principe.
end
if (i == 2) then
quantiteDeuxHeures = somme
elseif (i == 4) then
quantiteQuatresHeures = somme
elseif (i == 6) then
quantiteSixHeures = somme
elseif (i == 12) then
quantiteDouzeHeures = somme
end
end
commandArray[deuxHeuresDeviceIdx] = { ['UpdateDevice'] = deuxHeuresDeviceIdx..'|1|0;'..quantiteDeuxHeures }
commandArray[quatreHeuresDeviceIdx] = { ['UpdateDevice'] = quatreHeuresDeviceIdx..'|1|0;'..quantiteQuatresHeures }
commandArray[sixHeuresDeviceIdx] = { ['UpdateDevice'] = sixHeuresDeviceIdx..'|1|0;'..quantiteSixHeures }
commandArray[douzeHeuresDeviceIdx] = { ['UpdateDevice'] = douzeHeuresDeviceIdx..'|1|0;'..quantiteDouzeHeures }
--------------------------------------------
--------- Fin code à modifier -------------
--------------------------------------------
end
return commandArray