Page 1 sur 1

[Résolu] openURL et timeout

Publié : 24 janv. 2024, 09:17
par PHP-IP
Bonjour à tous,
je tente de récupérer la couleur du jour sur le site de RTE via DZVents.
Je sais qu'il existe déjà des scripts pour avoir la couleur du jour et je les ais déjà pas mal lus...

Mon Domoticz est installé sur un serveur Windows Server 2016

Lorsque je tente d'ouvrir l'URL suivante :

Code : Tout sélectionner

 'https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..domoticz.time.rawDate
J'ai systématiquement une erreur de timeout :

Code : Tout sélectionner

Error opening url: https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2024-01-24
2024-01-24 08:54:27.780 Error: dzVents: Error: (3.1.8) template: HTTP/1.1 response: 28 ==>> Timeout was reached
voici le bout de code qui tente d'ouvrir la page :

Code : Tout sélectionner

domoticz.openURL({
url = 'https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..domoticz.time.rawDate,
method = 'GET',
callback = 'Tempo', 
})
Voici le code source de la page de l'URL :

Code : Tout sélectionner

{"couleurJourJ":"TEMPO_BLEU","couleurJourJ1":"NON_DEFINI"}
A noter que cette URL fonctionne sans aucun souci et instantanément depuis un navigateur, que ce soit Firefox, Chrome ou encore Opera.

C'est un peu comme si le site de RTE filtrait les demandes quand une demande ne vient pas d'un navigateur...
Serait-il possible de faire passer DZVents pour un navigateur dans la commande openURL ?
Quelle pourrait être ma solution pour arriver à ouvrir cette URL ? (j'ouvre sans souci d'autres URL dans d'autres scripts).

Merci :)

Re: openURL et timeout

Publié : 24 janv. 2024, 09:50
par PHP-IP
J'ai finalement fait autrement en passant par une solution donnée par Keros

Code : Tout sélectionner

            domoticz.executeShellCommand({
                command = 'curl "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..domoticz.time.rawDate .. '"',
                callback = 'trigger_tempo',
            })         

solution donnée dans ce post :
viewtopic.php?t=13632

Voici donc mon code qui fonctionne :

Code : Tout sélectionner

return {
    active = true,
    on = {
    timer = {'every 5 minutes between 11:00 and 11:15'}, -- On teste toutes les 5 mn entre 11h00 et 11h15
    shellCommandResponses = { 'trigger_tempo' }
    },

	logging = {
		level = domoticz.LOG_INFO,
		marker = 'template',
	},
	
	execute = function(domoticz, item)

	    if (item.isTimer) then
            domoticz.executeShellCommand({
                command = 'curl "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..domoticz.time.rawDate .. '"',
                callback = 'trigger_tempo',
            })            
            
        elseif (item.isShellCommandResponse and item.ok) then
                -- Utilisation de 2 devices virtuels de type texte (Tempo AujourdHui et Tempo Demain)
                domoticz.devices('Tempo AujourdHui').updateText(item.json.couleurJourJ)
                domoticz.devices('Tempo Demain').updateText(item.json.couleurJourJ1)
        end
	end
}

Re: openURL et timeout

Publié : 24 janv. 2024, 13:31
par lost
PHP-IP a écrit : 24 janv. 2024, 09:50

Code : Tout sélectionner

    timer = {'every 5 minutes between 11:00 and 11:15'}, -- On teste toutes les 5 mn entre 11h00 et 11h15
}
Ce n'est arrivé que 2x depuis mars dernier que je suis passé à Tempo et qu'un script (d'abord simple, sans switch de planning automatique et autres alertes conso en jours rouge) tourne, mais si en général la MAJ intervient quelques minutes après 11h00 cela a parfois été au delà de 11h15:

-Au passage heure hiver, ou cela avait été en début d'après midi (je tentais jusque là entre 11h00 et 12h00, toutes les 10mn ; normalement à 11h10 la MAJ est faite car je n'ai plus J1 en NON_DEFINI): J'ai vu vers 14h30 que ça avait merdé, testé manuellement et vu que pas encre de MAJ et le temps de modifier le script pour étendre la plage à 11h00-16h00, c'était OK à 15h00. Cela avait donc du être fait entre 14h30 et 15h00.

-Le 15 janvier dernier, ou ce fut OK à 11h30 (donc MAJ entre 11h20 et 11h30, soit au moins +20mn par rapport a l'heure habituelle): Celle là cela aurait été dommage de la louper car le lendemain était rouge!

Le point problématique est aussi que le script ne teste pas la chaîne NON_DEFINI sur J1 (entre autres cas d'erreur possibles) pour valider une MAJ correcte (et MAJ les variables domoticz seulement à ce moment)/arrêter les interrogations du serveur EDF: Ici tu auras 4 curl (dont 2, 11h10 et 11h15, le plus souvent inutiles), peu de risques qu'EDF te bloque sur un quota d'interrogation horaire mais si tu étends la plage mieux vaut les limiter (augmenter le temps entre essais et arrêter dès que c'est OK) autant que possible.

Les conséquences, au delà de l'info que l'on peut avoir par ailleurs, c'est surtout si des automatismes liés à la mise en route de gros consommateurs testent une couleur différente de ROUGE: Là, un NON_DEFINI peut les mettre en mode BLEU/BLANC et faire allumer comme d'habitude un jour rouge.

EDIT: J'avais d'ailleurs posté ce que j'avais fait, pour un besoin non limité à l'information et codé en pur Lua mais dzVent en dérive donc il est possible d'élaguer sévère/en reprendre des bouts pour fiabiliser l'affaire:
viewtopic.php?p=116902#p116902

Re: [Résolu] openURL et timeout

Publié : 24 janv. 2024, 13:39
par PHP-IP
Bonjour,
mon script est maintenant bien plus complet et effectivement il teste si on est NON_DEFINI :)
Je vais voir pour faire des interrogations jusqu'à 15H mais pas toutes les 10mn je vais rallonger un peu.

Bonne journée