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 :
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

, 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 :
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

/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 ?