Page 2 sur 3

Re: dzvents openurl mode synchrone

Publié : 16 avr. 2021, 23:57
par Keros
C'est simplement ça, merci boum :)

Il ne reste plus qu'a le mettre dans une variable locale tout en haut et 'at 19:00' ne sera écrit qu'une fois sur toute la page.

Re: dzvents openurl mode synchrone

Publié : 17 avr. 2021, 10:44
par pierrotori

Code : Tout sélectionner

return {
	active = true,
	on = {
	timer = { 'at 22:00', 'every 15 minutes' },
    httpResponses = { 'urlgivre' }
	},
	data = {
		flag = { initial = 0, maxItems = 1 }
	},
execute = function(dz,item,trigger)
	if (item.isTimer) then
		if item.trigger == 'every 15 minutes' and dz.data.flag == 1 then
			dz.log('Pas de reprise:'.. scriptName, dz.LOG_DEBUG)
		else
			dz.openURL(
				{url = url,	method = 'GET', callback = 'urlgivre'}
				)
		end
	end	
	if item.isHTTPResponse and item.ok then
		dz.data.flag = 1
	else
		dz.data.flag = 0
	end
end -- execute
} -- return

persistent data contient
-- Persistent Data
local multiRefObjects = {

} -- multiRefObjects
local obj1 = {
["flag"] = 1;
}
return obj1

Re: dzvents openurl mode synchrone

Publié : 17 avr. 2021, 12:02
par Keros
Je ne comprends pas cette ligne :

Code : Tout sélectionner

if item.urlgivre == 'every 10 minutes'
Pourquoi .urlgivre ? C'est pour httpResponses et tu le compares avec le timer ?

Re: dzvents openurl mode synchrone

Publié : 17 avr. 2021, 16:49
par pierrotori
urlgivre sur le timer c'est une erreur :shock: , j'ai du rajouter le paramètre trigger dans la fonction car je ne l'avais pas c'est pour ca que j'avais mis le nom du trigger
la règle globale est
si premier appel pas d'erreur alors je flag dans data persistent que le script a tourné
pour pouvoir gérer une éventuelle reprise sur erreur je dois donc ajouter dans mon timer le every avec un temps cyclique
Si j'exécute une deuxième fois le script alors qu'il a bien tourné alors je ne lance pas la requete d'interrogation du site d'ou le check sur le timer : if item.trigger == 'every 15 minutes'' ce qui permet aussi qu'il s’exécute à l'heure tous les jours

le probleme de every 15 minutes, ca fait trop de sequence

j'aimerais 22h et 15 min cyclique jusqu'à 23h

Re: dzvents openurl mode synchrone

Publié : 18 avr. 2021, 09:48
par pierrotori
nouvelle version avec 2 retry enjoy

Code : Tout sélectionner

local time_run = 'at 19:00'
local time_retry1 = 'at 19:15'
local time_retry2 = 'at 19:30'


return {
	active = true,
	on = {
	timer = { 	tostring(time_run),
				tostring(time_retry1),
				tostring(time_retry2) },
    httpResponses = { 'urlgivre' }
	},
	data = {
		flag = { initial = 0, maxItems = 1 }
	},
execute = function(dz,item,trigger)
	-- L'appel et l'enregistrement des prévisions dans la variable jsonValeur
	if (item.isTimer) then
		if (item.trigger == time_retry1 or item.trigger == time_retry2) and dz.data.flag == 1 then
			dz.log('Pas de reprise:'.. scriptName, dz.LOG_DEBUG)
		else
			dz.data.flag = 0
			dz.openURL(
				{url = url,	method = 'GET', callback = 'urlgivre'}
				)
		end
	end
	if item.isHTTPResponse then
		if item.ok then
			dz.data.flag = 1
			..
		else
			-- ici item egal false si pas de donne en retour
			if item.trigger == time_retry2 and dz.data.flag == 0 then
				message = 'Données givre non disponible'
				dz.log(message, dz.LOG_INFO)
			end
		end
	end
end -- execute
} -- return


Re: dzvents openurl mode synchrone

Publié : 18 avr. 2021, 10:09
par Keros
Ah là oui, je comprends mieux ;)

Pour info, il est aussi possible de passer le type de déclencheur via httpResponses en envoyant le trigger du timer :

Code : Tout sélectionner

callback = 'urlgivre'..item.trigger
L'initialisation devient

Code : Tout sélectionner

httpResponses = { 'urlgivre'..time_run, 'urlgivre'..time_retry1, 'urlgivre'..time_retry2 }
De cette façon, lorsqu'on est dans le traitement des réponses, on peut savoir dans quel cas on se trouve.

Code : Tout sélectionner

if item.isHTTPResponse and item.ok then
	if item.trigger == 'urlgivre'..time_run then
	
	elseif item.trigger == 'urlgivre'..time_retry1

Re: dzvents openurl mode synchrone

Publié : 18 avr. 2021, 11:40
par pierrotori
parfait merci pour l'info, moi le but c'est d'appeler qu'une seule fois l'url et de gérer un retry afin de m'informer par sms soit de l'info givre ou celle de l'impossibilité de la récupérer
car quand il n'y a pas de givre je ne m'envoie pas le sms et du coup je ne sais pas si le script fonctionne correctement ce qui permet de m'en apercevoir dans les temps et pas 6 mois après car je regarde que très rarement la log d'erreur dans domoticz

important lorsqu'il y a appel de l'URL,
item.isHTTPResponse = false
item.ok = nil

quelque soit le retour d'ou la gestion de la reprise dans le else de isHTTPResponse

ce sont ces petites actions qui permettent de rendre robuste les scripts

dzvents openurl mode synchrone

Publié : 19 avr. 2021, 19:37
par pierrotori
script validé ce soir avec une reprise pour laquelle ca a fonctionné au bout de 2 fois
2021-04-19 19:00:26.101 Error: dzVents: Error: (3.0.2) METEO GIVRE v1.2: HTTP/1.1 response: 18 ==>> Transferred a partial file
2021-04-19 19:00:26.116 Error: dzVents: Error: (3.0.2) METEO GIVRE v1.2: Error parsing json to LUA table: /home/pi/domoticz/scripts/dzVents/../lua/JSON.lua:1234: /home/pi/domoticz/scripts/dzVents/../lua/JSON.lua:808: unclosed string at byte 3530 of:
2021-04-19 19:00:26.116 Status: dzVents: Info: METEO GIVRE v1.2: ============== METEO GIVRE
2021-04-19 19:00:26.116 Status: dzVents: Debug: METEO GIVRE v1.2: spring
2021-04-19 19:00:26.117 Status: dzVents: Debug: METEO GIVRE v1.2: true ici item.isHTTPResponse
2021-04-19 19:00:26.117 Status: dzVents: Debug: METEO GIVRE v1.2: false ici item.ok

2021-04-19 19:00:26.118 Status: dzVents: Info: METEO GIVRE v1.2: ------ Finished t_alerte_givre.lua

ayant aussi les data persistent en RAM , cela fonctionne aussi après reboot car le fichier data est crée à l'execution du script
il y aurait le cas ou le script tourne à 19H et reboot après donc dans ce cas je recevrais 2 fois l'informations

sinon j'ai vu aussi les parametres pour gérer d'autres erreur

satusCode
IsJson
est ce que vous l'utilisez aussi ?

Re: dzvents openurl mode synchrone

Publié : 22 avr. 2021, 19:19
par pierrotori
@keros par contre l'idée de trigger dans le callback m’interpelle car je pourrais mettre un caractère spécial dans le sms quand je suis en reprise de traitement dans le httpResponses

Code : Tout sélectionner

httpResponses = { 'urlgivre'..time_run, 'urlgivre'..time_retry1, 'urlgivre'..time_retry2 }
Par contre pourquoi il faut mettre tous les timers ?

Re: dzvents openurl mode synchrone

Publié : 22 avr. 2021, 19:33
par Keros
L'idée de passer le trigger du timer dans le httpResponses te permet de savoir quel trigger du timer est à l'origine du traitement du httpResponses.

Je ne comprends pas ce que dis à propos de
pierrotori a écrit : 22 avr. 2021, 19:19 je pourrais mettre un caractère spécial dans le sms
Que cherches tu as faire ?