Page 2 sur 4

Re: Service météo

Publié : 16 sept. 2024, 11:32
par Wolfen38
Je viens de tester

Code : Tout sélectionner

https://api.openweathermap.org/data/2.5/onecall?lat='..lat..'&lon='..long..'&appid='..api..'&lang=fr&units=metric
Ca me mets erreur de clé

avec

Code : Tout sélectionner

https://api.openweathermap.org/data/2.5/onecall?lat='..lat..'&lon='..long..'&appid='..api..'
Ca fonctionne, je récupère les valeur dans mon navigateur.

Par contre j'ai toujours l'erreur dans le script au niveau de la récupération des valeurs.
Cette ligne

Code : Tout sélectionner

weather1 = jsonValeur.current.weather[1].description
donne cette erreur

Code : Tout sélectionner

2024-09-16 13:43:00.625 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_meteo-actuelle.lua: ...e/pi/domoticz/scripts/lua/script_time_meteo-actuelle.lua:58: attempt to index a nil value (field 'current')

Re: Service météo

Publié : 17 sept. 2024, 12:36
par Keros
Tu as remplacé l'URL dans ton script ?

Tu as essayé de faire un print du jsonValeur ?

T+il serait également plus facile si tu nous partageais ton script car l'erreur sur cette ligne peut également le résultat d'un problème un peu plus haut.

Re: Service météo

Publié : 17 sept. 2024, 12:59
par Wolfen38
Oui, j'ai remplacé l'url, mais sans succes

Voila mon script complet :

Code : Tout sélectionner

-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')

--------------------------------------------
----------- Variables à éditer -------------
-------------------------------------------- 
  --https://api.openweathermap.org/data/2.5/weather?lat=45.6131965&lon=5.4592937&appid=5d54c98e1fe512946debfbd71f245c76
local api = '5d54c98e1fe512946debfbd71f245c76' -- Remplacer par votre clé API
local lat = '45.6131965' --  Remplacer par ici votre latittude
local long = '5.4592937' -- Remplacer par votre longitude

--Sélectionner le chemin vers votre fichier JSON.lua en enlevant les dé commentant  la ligne pour votre système d'exploitation

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- for PI

--------------------------------------------
---------- Fin variables à éditer ----------
-------------------------------------------- 

commandArray = {}

-- Récupère les IDX des widgets.

idxactuel = '591'

time=os.time()
-- Récupère l'heure actuelle.
local heure = os.date('%H:%M')
local debug = true

--recupere les minutes
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))

if minutes==57 then

  -- 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"'))
  --config=assert(io.popen('/usr/bin/curl "https://api.openweathermap.org/data/2.5/onecall?lat='..lat..'&lon='..long..'&appid='..api.."'))
  config=assert(io.popen('/usr/bin/curl "https://api.openweathermap.org/data/2.5/weather?lat=45.6131965&lon=5.4592937&appid=5d54c98e1fe512946debfbd71f245c76"'))
  blocjson = config:read('*all')
  config:close()
  jsonValeur = json:decode(blocjson)

--------------------------------------------
---- Code à modifier selon vos besoins -----
-------------------------------------------- 

    -- 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
    weather1 = jsonValeur.current.weather[1].description
	print("Lancement du script time météo actuelle")
	
--<debut Essai soleil	


		if (weather1=='ciel dégagé' or weather1=='peu nuageux' or weather1=='partiellement nuageux') then 
		commandArray['Variable:Soleil'] = '1'
		print('Météo du jour ensoleillé : '..weather1)
		else
		commandArray['Variable:Soleil'] = '0'
		print('Météo du jour couvert : '..weather1)
end

--Fin Essai soleil	

--<debut Essai météo du jour	
		if (weather1=='peu nuageux' or weather1=='partiellement nuageux' or weather1=='ciel dégagé')then 
		commandArray[getDeviceName(591)] ='Set Level: 20'
		print("IDX 591 : "..getDeviceName(591))
		elseif (weather1=='pluie' or weather1=='légère pluie') then 
		commandArray[getDeviceName(591)] ='Set Level: 10'
		print("IDX 591 : "..getDeviceName(591))
		elseif (weather1=='couvert' or weather1=='nuageux') then 
		commandArray[getDeviceName(591)] ='Set Level: 30'
		print("Temps IDX 591 : "..weather1)
		print("IDX 591 : "..getDeviceName(591))
		elseif weather1=='légères chutes de neige' then 
		commandArray[getDeviceName(591)] ='Set Level: 40'
		print("IDX 591 : "..getDeviceName(591))
				
end

--Fin Essai Essai météo du jour


	

--------------------------------------------
--------- Fin code à modifier  -------------
--------------------------------------------
end

return commandArray

Re: Service météo

Publié : 17 sept. 2024, 21:15
par Keros
En changeant https://api.openweathermap.org/data/2.5/[b]onecall[/b]? par https://api.openweathermap.org/data/2.5/[b]weather[/b]? cela te change d'API ce qui explique que jsonValeur.current.weather[1].description ne te donne plus de données.


Je t'ai indiqué mon tuto dans lequel j'explique comment fonctionne ce script. En le suivant, tu pourras modifier ta ligne afin que ton script fonctionne de nouveau avec la nouvelle API.

Re: Service météo

Publié : 18 sept. 2024, 08:01
par Wolfen38
Si j'utilise onecall, que je mets le lien dans chrome, j'ai ce résultat :

Code : Tout sélectionner

cod: 401,
message: "Invalid API key. Please see https://openweathermap.org/faq#error401 for more info."

Re: Service météo

Publié : 18 sept. 2024, 12:37
par Keros
La clé que tu utilises ne semble plus fonctionner avec cet API OneCall. Ma clé OneCall fonctionne toujours.
Pourquoi la tienne ne fonctionne plus ?? Regarde peut-être ton compte OpenWeatherMap.

Re: Service météo

Publié : 19 sept. 2024, 19:15
par Argenlos
Bonjour,

Depuis ce matin, je n'ai plus aucun retour de OWM
2024-09-19 19:07:11.346 Status: MyOWM: Worker stopped...
2024-09-19 19:07:11.347 Status: MyOWM: Using specified location (City nantes,fr)!
2024-09-19 19:07:11.461 ESP8266: Light/Switch (PIR_AlarmeMaison)
2024-09-19 19:07:11.480 Status: MyOWM: City (2990968)-> Lat/Long = 47.1667,-1.5833
2024-09-19 19:07:11.480 Status: MyOWM: Started
2024-09-19 19:07:13.457 ESP8266: Light/Switch (PIR_AlarmeMaison)
2024-09-19 19:07:14.608 Error: MyOWM: Error getting http data!
2024-09-19 19:07:15.458 ESP8266: Light/Switch (PIR_AlarmeMaison)
Cela marchait bien jusqu'à à peut prêt 10h00 du matin ce jour.

J'ai testé l'api directement dans mon navigateur, c'est fonctionnel (que ce soit ID de la ville, le nom ou les coordonnées de la ville)
{
"coord": {
"lon": -1.5833,
"lat": 47.1667
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
"base": "stations",
"main": {
"temp": 295.79,
"feels_like": 295.39,
"temp_min": 294.82,
"temp_max": 296.11,
"pressure": 1014,
"humidity": 49,
"sea_level": 1014,
"grnd_level": 1011
},
"visibility": 10000,
"wind": {
"speed": 5.14,
"deg": 60
},
"clouds": {
"all": 0
},
"dt": 1726765531,
"sys": {
"type": 1,
"id": 6574,
"country": "FR",
"sunrise": 1726724971,
"sunset": 1726769438
},
"timezone": 7200,
"id": 2990968,
"name": "Arrondissement de Nantes",
"cod": 200
}
Donc pas de souci au niveau de l'api, à moins que Domoticz ne "décode" pas le Json.

Le serveur à été redémarré bien entendu.
J'ai fais un
sur le serveur pour valider que tout passait bien sur le serveur et qu'il n'y avait pas blocage quelconque.


Alors j'ai regardé un peu le code source de Domoticz, attention je ne suis pas développeur, donc je peux me tromper.
Source: https://github.com/domoticz/domoticz/bl ... herMap.cpp
Ligne 48 à 52
#define OWM_v2_onecall_URL "https://api.openweathermap.org/data/2.5/onecall?"
#define OWM_v3_onecall_URL "https://api.openweathermap.org/data/3.0/onecall?"
#define OWM_Get_City_Details "https://api.openweathermap.org/data/2.5/weather?"
#define OWM_icon_URL "https://openweathermap.org/img/wn/" // for example 10d@4x.png
#define OWM_forecast_URL "https://openweathermap.org/city/"
Si je teste par exemple avec la même clé api
j'ai cette errreur
{"cod":401, "message": "Invalid API key. Please see https://openweathermap.org/faq#error401 for more info."}
Donc dans le code sources l'appel de l'URL pour l'API2.5 ne marchera pas car "à la main cela ne marche pas"


D'autres on le soucis...et il faut laisser ses coordonnées CB pour pouvoir interroger le service maintenant. hum...
https://www.domoticz.com/forum/viewtopi ... ap#p318972

En gros, c'est fichu :( Non ?

Merci

Re: Service météo

Publié : 19 sept. 2024, 20:55
par Keros
Également une erreur de mon côté depuis aujourd'hui :
Error: dzVents: Meteo: HTTP/1.1 response: 401 ==>> Unauthorized
Ils sont peut-être en train de couper l'ancien API 2.5 Onecall :roll:
Je n'ai pas encore poussé plus loin l'analyse... Ce weekend si je trouve le temps.

Re: Service météo

Publié : 19 sept. 2024, 22:44
par hestia
j'ai reçu ce mail d'OpenWeather
Dear OpenWeather client,

We would like to inform you that we started One Call 2.5 deprecation, and your access to the product will be stopped on September 17, 2024.

We would like to recommend you to switch to One Call 3.0 that would provide you with advanced features such as a hyperlocal minute forecast for one hour, 2-day hourly forecast, 8-day daily forecast, 4-day forecast for any timestamp, government weather alerts, 45-year history for any timestamp, daily aggregation, weather overview, and other features.

One Call 3.0 has a flexible pay-as-you-call subscription with 1000 free calls per day. Your payment card will be used when you exceed the free limit, £0.0012 per call. API call limits are set up in your account Profile section.
donc je comprends que ça s'arrête avec One Call 2.5...
Et faut mettre une CB pour la 3.0!

Re: Service météo

Publié : 20 sept. 2024, 15:37
par Keros
Je viens de voir le mail, je venais pour le partage :mrgreen:

C'était évident qu'ils allaient essayer de passer tout le monde sur leur dernière API.

Les 1000 premiers appels API par jour sont gratuits... Il ne faut pas que la machine s'emballe sinon ça risque de couter cher à la fin du mois :?


Par contre, prévenir par mail le 10 pour un arrêt le 17, cela ne laisse pas beaucoup de temps pour se retourner :evil: