Enfin, ça marche...

J'obtiens maintenant les bons device avec les bonnes valeurs au bon endroit. j'ai bien cherché mais sans nos échanges Vianncy et Keros, je n'y serais pas arrivé, merci de votre aide.
Ce qui m' permis d'aboutir c'est le paramètre "
..barometer_forcast.." avec les valeurs associées (le bout de code donné par Vianncy), mais aussi le paramètre
..humidity.. qu'il m'a fallu écrire comme suit
..humidity..';0' dans la ligne de code du script. Je pense que les valeurs bizarres que je trouvais étaient dues au mauvais codage de ces 2 paramètres me décalant ainsi les valeurs recupérées, entrainant de fait un affichage incohérent.
je vous donne pour info le script complet (ci-dessous) si cela intéresse quelqu'un, mais sachez que je n'ai aucun mérite car je me suis basé sur tout le travail et les recherches décrits dans ce forum. Donc sur ce point merci à tous. je n'ai d'ailleurs pas tout compris mais le résultat me convient.
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'
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 tempDeviceIdx = 266 -- EXEMPLE 3 - 1) Idx de votre dispositif Température
local tempFeelsDeviceIdx = 273 -- EXEMPLE 3 - 1 bis) Idx de votre dispositif Température resentie
local vtrDeviceIdx = 276 -- EXEMPLE 3 - 2) Idx de votre dispositif Vent+Température+Refroidissement
local THBDeviceIdx = 277 -- EXEMPLE 3 - 2) Idx de votre dispositif température+humidité+barometre
local rainDeviceIdx = 271 -- EXEMPLE 3 - 3) Idx de votre dispositif Précipitations
local uvDeviceIdx = 272 -- EXEMPLE 3 - 4) Idx de votre dispositif UV
local atmDeviceIdx = 269 -- EXEMPLE 3 - 5) Idx de votre dispositif Baromètre
--local humDeviceIdx = 268 -- EXEMPLE 3 - 6) Idx de votre dispositif humidité (pourcentage)
local cloudDeviceIdx = 267 -- EXEMPLE 3 - 6) Idx de votre dispositif couverture nuageuse (pourcentage)
--------------------------------------------
----------- Variables à éditer -------------
--------------------------------------------
local api = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -- Remplacer par votre clé API
local lat = 'zzzzzzzzzzzzz' -- Remplacer par ici votre latittude
local long = 'yyyyyyyyyyyy' -- 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)
-- 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 -----
--------------------------------------------
-- EXEMPLE 1 - Temps Actuel
-- L'enregistrement des données souhaitées dans des variables (vous pouvez en ajouter autant que vous voulez)
temp = jsonValeur.current.temp
rose = jsonValeur.current.dew_point
weather = jsonValeur.current.weather[1].description
-- L'utilisation des données (ici j'écris une ligne dans le LOG de DomoticZ)
msg = 'Il fait '..temp..' degres et la météo indique '..weather..' avec un point de rosé à '..rose..' degres.'
log(msg)
---------------------------------------------
-- EXEMPLE 2 - Temps dans X heures
-- le [11] signifie dans 11h à modifier selon l'heure d'appel du script
temp_demain = jsonValeur.hourly[11].temp
weather_demain = jsonValeur.hourly[11].weather[1].description
-- Code pour afficher et convertir la date et l'heure de la prévision
time_prevision = jsonValeur.hourly[11].dt
heure_prevision = (os.date("%x à %X", time_prevision))
msg = 'Le '..heure_prevision..', il fera '..temp_demain..' degrés et la météo prévoit '.. weather_demain..'.'
log(msg)
--------------------------------------------
-- EXEMPLE 3 -
-- dans Matériel créé un capteur virtuel Dummy que vous appelez comme vous voulez
-- 1) Puis créer un capteur virtuel de température à partir du Dummy que vous venez de créé
-- Dans dispositif, notez l'IDX du capteur température que vous venez de créer et renseignez en haut de ce script pour "local tempDeviceIdx"
-- 2) Créer un capteur virtuel Vent+Température+Refroidissement et renseignez en haut de ce script pour "local vtrDeviceIdx"
-- 3) Créer un capteur virtuel Précipitations et renseignez en haut de ce script pour "local rainDeviceIdx"
-- 4) Créer un capteur virtuel UV et renseignez en haut de ce script pour "local uvDeviceIdx"
-- 5) Créer un capteur virtuel Baromètre et renseignez en haut de ce script pour "local atmDeviceIdx"
-- 6) Créer un capteur virtuel Pourcentage et renseignez en haut de ce script pour "local humDeviceIdx"
-- Créer un capteur virtuel Pourcentage et renseignez en haut de ce script pour "local cloudDeviceIdx"
temp = jsonValeur.current.temp
tempFeels = jsonValeur.current.feels_like
windSpeed = jsonValeur.current.wind_speed
windSpeed2 = windSpeed*10 -- je ne sais pas pourquoi Domoticz divise la valeur de winSpeed par 10 !?
--windGust = jsonValeur.current.wind_gust -- Ne fonctionne pas ??
windGust = windSpeed
windGust2 = windGust*10
windDirection = jsonValeur.current.wind_deg
--rain = jsonValeur.current.rain -- Ne fonctionne pas ??
rain = jsonValeur.daily[1].rain
UVIndex = jsonValeur.current.uvi
pressionAtm = jsonValeur.current.pressure
humidity = jsonValeur.current.humidity
clouds = jsonValeur.current.clouds
-- 1) MAJ du capteur Virtuel de Température
commandArray[tempDeviceIdx] = { ['UpdateDevice'] = tempDeviceIdx..'|0|'..temp }
log('MAJ tempDevice '..tempDeviceIdx..' : '..temp..'°C')
-- 1 bis) MAJ du capteur Virtuel de Température ressentie
commandArray[tempFeelsDeviceIdx] = { ['UpdateDevice'] = tempFeelsDeviceIdx..'|0|'..tempFeels }
log('MAJ tempFeelsDevice '..tempFeelsDeviceIdx..' : '..tempFeels..'°C')
-- 2) MAJ du capteur Virtuel de Vent+Température+Refroidissement
local function quadrants(degrees)
local quadrants = {"NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"}
if degrees > 348.75 or degrees <= 11.25 then
return "N"
else
local index = tonumber(math.floor((degrees - 11.25) / 22.5)+1)
return quadrants[index]
end
end
local direction = quadrants(windDirection)
commandArray[vtrDeviceIdx] = { ['UpdateDevice'] = vtrDeviceIdx..'|0|'..windDirection..';'..tostring(direction)..';'..windSpeed2..';'..windGust2..';'..temp..';'..tem$
log('MAJ vtrDevice '..vtrDeviceIdx..' : '..temp..'°C'..tempFeels..';'..windSpeed2..'m/s'..windGust2..'m/s '..direction..'|'..windDirection)
--2bis) MAJ capteur virtuel temperatue humidité et barometre
--variables de prévision
local BAROMETER_UNKNOWN = 5
local BAROMETER_THUNDERSTORM = 4
local BAROMETER_UNSTABLE = 3
local BAROMETER_CLOUDY_RAIN = 2
local BAROMETER_SUNNY = 1
local BAROMETER_STABLE = 0
local barometer_forecast
-- On réutilise pressionAtm
if pressionAtm < 1006 then
barometer_forecast = BAROMETER_THUNDERSTORM
elseif pressionAtm <=1013 then
barometer_forecast = BAROMETER_UNSTABLE
elseif pressionAtm <= 1016 then
barometer_forecast = BAROMETER_CLOUDY_RAIN
elseif pressionAtm <= 1030 then
barometer_forecast = BAROMETER_SUNNY
elseif pressionAtm > 1036 then
barometer_forecast = BAROMETER_STABLE
end
commandArray[THBDeviceIdx] = { ['UpdateDevice'] = THBDeviceIdx..'|0|'..temp..';'..humidity..';0;'..pressionAtm.. ';' ..barometer_forecast }
log('MAJ THBDevice '..THBDeviceIdx..' : '..temp..'°C;'..humidity..'%; '..pressionAtm..'Hpa')
-- 3) MAJ du capteur de pluie
-- commandArray[rainDeviceIdx] = { ['UpdateDevice'] = rainDeviceIdx..'|1|0;'..rain }
--log('MAJ rainDevice '..rainDeviceIdx..' : '..rain..'mm')
-- 4) MAJ du capteur d'UV
commandArray[uvDeviceIdx] = { ['UpdateDevice'] = uvDeviceIdx..'|1|'..UVIndex..';0' }
log('MAJ uvDevice '..uvDeviceIdx..' : '..UVIndex)
-- 5) MAJ du capteur baromètre
-- commandArray[atmDeviceIdx] = { ['UpdateDevice'] = atmDeviceIdx..'|0|'..pressionAtm.. ';' ..barometer_forecast }
-- log('MAJ atmDevice '..atmDeviceIdx..' : '..pressionAtm)
-- 6) MAJ du capteur humidité et du capteur couverture nuageuse
-- commandArray[humDeviceIdx] = { ['UpdateDevice'] = humDeviceIdx..'|0|'..humidity }
-- log('MAJ humDevice '..humDeviceIdx..' : '..humidity)
commandArray[cloudDeviceIdx] = { ['UpdateDevice'] = cloudDeviceIdx..'|0|'..clouds }
log('MAJ cloudDevice '..cloudDeviceIdx..' : '..clouds)
--------------------------------------------
--------- Fin code à modifier -------------
--------------------------------------------
end
return commandArray
et j'ajoute qqes copies ecran des device obtenus dans chacun des onglets de Domoticz (mesures meteo et temperature) ainsi que le log.