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.
dzvents openurl mode synchrone
Re: dzvents openurl mode synchrone
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.
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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
Re: dzvents openurl mode synchrone
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
local multiRefObjects = {
} -- multiRefObjects
local obj1 = {
["flag"] = 1;
}
return obj1
Dernière modification par pierrotori le 18 avr. 2021, 00:11, modifié 2 fois.
Re: dzvents openurl mode synchrone
Je ne comprends pas cette ligne :
Pourquoi .urlgivre ? C'est pour httpResponses et tu le compares avec le timer ?
Code : Tout sélectionner
if item.urlgivre == 'every 10 minutes'Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
Re: dzvents openurl mode synchrone
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
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
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
Re: dzvents openurl mode synchrone
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
Dernière modification par pierrotori le 19 avr. 2021, 19:33, modifié 2 fois.
Re: dzvents openurl mode synchrone
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
De cette façon, lorsqu'on est dans le traitement des réponses, on peut savoir dans quel cas on se trouve.
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.triggerCode : Tout sélectionner
httpResponses = { 'urlgivre'..time_run, 'urlgivre'..time_retry1, 'urlgivre'..time_retry2 }Code : Tout sélectionner
if item.isHTTPResponse and item.ok then
if item.trigger == 'urlgivre'..time_run then
elseif item.trigger == 'urlgivre'..time_retry1Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
Re: dzvents openurl mode synchrone
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
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
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
dzvents openurl mode synchrone
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 ?
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
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 ?
-
pierrotori
- Messages : 821
- Inscription : 29 févr. 2016, 12:11
Re: dzvents openurl mode synchrone
@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
Par contre pourquoi il faut mettre tous les timers ?
Code : Tout sélectionner
httpResponses = { 'urlgivre'..time_run, 'urlgivre'..time_retry1, 'urlgivre'..time_retry2 }Re: dzvents openurl mode synchrone
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
Je ne comprends pas ce que dis à propos de
Que cherches tu as faire ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos