Page 4 sur 5

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 09 oct. 2022, 16:50
par gawel3164
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;

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')
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.....

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

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 09 oct. 2022, 17:37
par Keros
Il faut essayer de comprendre les messages d'erreur :
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')
Te donne plusieurs infos :
  • script_time_prev_pluie.lua:30 >> Le nom du script générant l'erreur et la ligne correspondante
  • attempt to concatenate a nil value >> Traduction litérale : tentative de concaténation d'une valeur nulle
  • (global 'scriptVersion') >> c'est scriptVersion qui génère la valeur nulle
Tu as normalement toutes les infos pour analyser et résoudre cette erreur.

Si tu regardes / compares le dernier script de garrycooper, il ajoute des choses évitant cette erreur.

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 09 oct. 2022, 18:04
par gawel3164
Merci, j'avais compris le message d'erreur, et bien souvent je cherche et je trouve, mais là je ne comprends pas que ni l'un ni l'autre de ces scripts ne fonctionne, ni d'où vient l'erreur. Quelqu'un utilise t'il ce script avec succès? Merci de vos retours. ;)

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 09 oct. 2022, 21:35
par Keros
La ligne en question affiche le nom du script et sa version dans les logs. Il y a un souci pour récupérer ces infos qui ne sont pas définies avant.

Tu as essayé d'effacer la ligne ? Son exécution n'est pas forcément utile :roll:

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 10 oct. 2022, 10:06
par boum
Commençons par le commencement où @Vianncy ment ;) quand il dit qu'il donne le code en entier :lol:.

Ceci dit, il mentionne le post de @joebuz avec un « Je vous conseille d'y jeter un œil attentif avant toute chose. »

On trouve au les fameuses lignes manquantes (à adapter bien évidemment) :

Code : Tout sélectionner

--[[ script_time_meteo.lua tested on domoticz 2020.2

author/auteur = joebuz
update/mise à jour = 03/05/2020
creation = 03/05/2020

Created from this topic
author/auteur = Keros
https://easydomoticz.com/forum/viewtopic.php?f=17&t=9892
Date = 13/04/2020

Ce script nécessite l'inscription préalable à l'API Openweathermap : https://openweathermap.org
liste des commandes : https://openweathermap.org/api/one-call-api
--]]

local function log(p_message)
  -- Décommenter la ligne du dessous pour afficher les logs / Commenter pour ne pas afficher les logs
  print("[Meteo] " .. p_message)
end

local scriptName        = 'Meteo'
local scriptVersion     = 'V1.0'

-- la suite est déjà fournie :
local time              = os.date("*t")       -- Si vous souhaitez exécuté ce script toutes les X min

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 10 oct. 2022, 14:31
par gawel3164
@keros: effectivement, je me demandais d'où provenaient ces infos.... J'avais donc effectivement mis cette ligne en commentaire, mais j'avais un 'nil value' sur une autre ligne un peu plus loin du coup. C'est pour ça que j'étais passé sur le script de garrycooper, mais rebelote avec des nil value.

@boum: ce cochon de vianncy! :lol: ;) ;)

En tout cas merci à tous les deux pour votre aide. Après avoir testé le script de vianncy et celui de garrycooper, je vais repartir à la base et tester celui de joebuz! Je vous tiendrai au courant.

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 10 oct. 2022, 17:39
par Keros
Arrête peut-être de sauter d'un script à l'autre dès qu'il y a une erreur et essaye de comprendre pourquoi elle se présente. De cette façon, tu vas pouvoir déboguer ton programme et arriver à le faire fonctionner comme tu en as besoin.

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 11 oct. 2022, 19:23
par gawel3164
Bon, j'abandonne..... Que ce soit un script ou l'autre, en ayant rajouté les lignes manquantes, a chaque appel Json, on obtient un nil value.... Et quand j'essaie de voir le Json en tapant https://api.openweathermap.org/data/2.5 ... id={APIkey} , ça me dit que ma clé api n'est pas valide.....

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 11 oct. 2022, 21:26
par Keros
Tu t'es enregistré récemment ? Il est possible que les nouvelles clés API ne soient valides qu'avec leur dernière API : onecall est passé en version 3.

Re: [LUA] Quantité de précipitation avec OpenWeatherMap

Publié : 11 oct. 2022, 22:10
par gawel3164
Oui, je me suis enregistré cette semaine. Et donc si c'est passé en V3, que faut il faire? adapter le script ?