Page 2 sur 2
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 18:46
par Keros
Il faut une clé API et renseigner la latitude et la longitude pour avoir un retour de l'API OpenWeatherMap. L'idée du tuto était d'expliquer une façon de récupérer des info d'un Json. Tu peux l'appliquer à ton besoin.
Tu peux aussi faire un débogage en mettant le Json directement dans les logs pour voir si l'appel JSON renvoi bien des données.
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 18:56
par Tintin77
merci beaucoup Keros pour le temps que vous consacrez à m'aider, j'apprécie vraiment cela.
J'ai en effet bien un clé API, et l'URL mise directement dans le navigateur renvoi parfaitement le résultat attendu (j'ai mis un extrait du résultat dans mon post précédent). C'est uniquement lorsque je fais l'appel depuis le script DZvents que cela ne fonctionne pas. Pourtant j'ai suivi pas-à-pas votre tutorial. Il y a toujours ce problème avec json qui plante...
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 19:40
par Keros
Tu utilises bien le même url entre ton navigateur et le script. Le tuto est basé sur un API onecall 2.5 qui a changé de version depuis que je l'ai rédigé.
As tu essayer de mettre directement le résultat du Json dans les log ?
C'est quoi l'erreur que tu as ? L'erreur que tu as mis précédement indique un soucis pour extraire une valeur d'un JSon : Soit le Json n'as pas de donéne, soit c'est la "décortication" qui ne fonctionne pas. D'où essayer de faire un print du Json complet.
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 21:25
par Tintin77
Je viens d'effectué un "print" de la variable "blocjson". la variable semble vide. Du coup cela signifierait que le problème est dans la lecture de l'URL ? J'ai cherché sur internet d'autres exemples pour utiliser "io.popen" mais je ne trouve pas de solution non plus dans cette direction
json = (loadfile "scripts/lua/JSON.lua")() -- Relative path for most systems
config=assert(io.popen('/usr/bin/curl "
https://api.openweathermap.org/data/2.5 ... its=metric"'))
blocjson = config:read('*all')
config:close()
print('>>>>> ici >>> '..blocjson)
jsonValeur = json:decode(blocjson)
temp = jsonValeur.current.AstrTwilightEnd >> Ligne 27
Les infos visibles dans le log :
2023-08-22 21:23:02.278 Status: dzVents: Info: Handling events for: "Chime", value: "166"
2023-08-22 21:23:02.279 Status: dzVents: Info: ALERTE AUTO-OFF TEST >>> : ------ Start internal script: AUTO_OFF_ALERT_TEST: Device: "Chime (qRFX)", Index: 125
2023-08-22 21:23:02.297 Status: dzVents: >>>>> ici >>>
2023-08-22 21:23:02.297 Status: dzVents: Info: ALERTE AUTO-OFF TEST >>> : ------ Finished AUTO_OFF_ALERT_TEST
2023-08-22 21:23:02.297 Error: dzVents: Error: (3.1.8) ALERTE AUTO-OFF TEST >>> : An error occurred when calling event handler AUTO_OFF_ALERT_TEST
2023-08-22 21:23:02.297 Error: dzVents: Error: (3.1.8) ALERTE AUTO-OFF TEST >>> : ...cripts\dzVents\generated_scripts/AUTO_OFF_ALERT_TEST.lua:27: attempt to index a nil value (global 'jsonValeur')
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 21:41
par Keros
L'url est valide pour l'API OneCall 2.5. Tu as une ancienne clé OpenWeatherMAp ? Si tu as généré une clé récement, l'url doit être différente : c'est du OneCall 3.0 actuellement. Il vaut mieux reprendre l'URL de leur documentation.
Pour tester ça, il faut que tu mettes l'url dans ton navigateur (avec ta clé + latitude +longitude). Si tu as les données brutes avec toutes les infos, tu colles l'adresse de ton navigateur dans ton script entre les deux " ".
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 22:03
par Tintin77
Dans mon navigateur l'url fonctionne parfaitement, le JSON résultat s'affiche comme attendu.
Aperçu (je ne peux pas tout coller sinon le texte est trop long et il est refusé)
Code : Tout sélectionner
{
"lat": 48,
"lon": 3,
"timezone": "Europe/Paris",
"timezone_offset": 7200,
"current": {
"dt": 1692734604,
"sunrise": 1692679913,
"sunset": 1692730230,
"temp": 21.73,
"feels_like": 22.13,
"pressure": 1021,
"humidity": 83,
"dew_point": 18.72,
"uvi": 0,
"clouds": 0,
"visibility": 10000,
"wind_speed": 3.46,
"wind_deg": 57,
"wind_gust": 6.92,
"weather": [
{
"id": 800,
"main": "Clear",
"description": "ciel dégagé",
"icon": "01n"
}
]
},
"minutely": [
{
"dt": 1692734640,
"precipitation": 0
},
{
"dt": 1692734700,
"precipitation": 0
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 22 août 2023, 23:15
par Keros
Et cette même url dans ton script ne fonctionne pas ?
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 23 août 2023, 20:54
par Tintin77
J'ai fini par trouver l'explication.
A priori il n'est pas possible de faire fonctionner les commandes de lecture du JSON dans le script DZvents, contrairement aux scripts LUA.
En revanche, il est possible d'utiliser l'instruction "openURL" dans un script DZvents de type "Http request".
Voici le code à utiliser : (cf. wiki Domoticz)
Du coup plus qu'à fusionner mes 2 script DZvents (de 2 type différents donc avec des param d'entrée/sortie différents...) en 1 seul. Si j'avais su j'aurais fait du LUA !
Code : Tout sélectionner
return {
on = {
timer = {
'every 1 minutes' -- just an example to trigger the request
},
httpResponses = {
'AddjValue' -- must match with the callback passed to the openURL command
}
},
logging = {
level = domoticz.LOG_INFO,
marker = 'TEST >> ',
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'http://xx:xx/json.htm?type=devices&rid=xx',
method = 'GET',
callback = 'AddjValue', -- see httpResponses above.
})
end
if (item.isHTTPResponse) then
if (item.ok) then
if (item.isJSON) then
local someValue = item.json.result[1].AddjValue -- Indiquer ici le champ du JSON à récuperer
print('AddjValue == '..someValue)
end
else
domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR)
domoticz.log(item, domoticz.LOG_ERROR)
end
end
end
}
Re: Connaitre le délai restant (du délai allumage / extinction automatique)
Publié : 24 août 2023, 00:11
par Keros
Désolé, je n'avais pas fait attention que tu faisais un script en DzVents avec une commande LUA
Maintenant que la récupération d'info Json fonctionne, tu arrives à faire ce que tu souhaites pour le délai d'extinction ?