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 ?