Erreur avec openURL : dzVents: Error: (3.1.8) HTTP/1.1 response: 92 ==>> Stream error in the HTTP/2 framing layer

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
inteloide
Messages : 9
Inscription : 30 janv. 2022, 10:05

Erreur avec openURL : dzVents: Error: (3.1.8) HTTP/1.1 response: 92 ==>> Stream error in the HTTP/2 framing layer

Message par inteloide »

Bonjour la communauté !

Je cherche à faire un script dzVents pour récupérer la couleur du jour avec EDF tempo.
J'ai bien vu (après coup) qu'un scipt à été mis sur le site pour le récupérer cette info viewtopic.php?t=9015, cependant, il me paraissait complexe (wrep...), alors qu'en théorie, ça devrait être simple.

J'ai donc fait le code ci dessous mais j'ai à chaque fois l'erreur suivante :
2023-11-12 18:03:30.407 Error: Error opening url: http://particulier.edf.fr/services/rest ... 2023-11-12
2023-11-12 18:03:30.442 dzVents: Error: (3.1.8) HTTP/1.1 response: 92 ==>> Stream error in the HTTP/2 framing layer
Alors que le résultat dans un navigateur s'affiche sans délai.
Je n'ai rien vu concernant le paramétrage du timeout avec openURL...

Si qqn à une piste....merci !

Le code :

Code : Tout sélectionner

return {
    on = {
        timer = {'every minute'},
        httpResponses = { 'trigger' },
    },

	logging = {
		level = domoticz.LOG_DEBUG, 			                                            -- Décommenter pour afficher les log au niveau Debug
	},

    execute = function(domoticz, item)
        if (item.isTimer) then
            
            domoticz.openURL({
                url = 'https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..domoticz.time.rawDate,
                method = 'GET',
                callback = 'trigger',
            })
            domoticz.log("openURL", domoticz.LOG_DEBUG)
        end
    
        if (item.isHTTPResponse) then
            if (item.ok) then
                domoticz.log("Retour : "..item, domoticz.LOG_DEBUG)
            else
                
                domoticz.log("Item NOK", domoticz.LOG_DEBUG)
            end
        end
    end
}
L'informatique doit être un outil et non une finalité.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur avec openURL : dzVents: Error: (3.1.8) HTTP/1.1 response: 92 ==>> Stream error in the HTTP/2 framing layer

Message par Keros »

Pour faire la même chose, je passe par une commande curl :

Code : Tout sélectionner

domoticz.executeShellCommand({
                command = 'curl "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..domoticz.time.rawDate .. '"',
                callback = 'trigger',
            })
J'attire ton attention au nom que tu donnes au callback : il ne faut pas que tu réutilises le même entre plusieurs scripts sinon ils vont être lancés en même temps. "trigger" étant générique, si tu le reprends en exemple dans un autre script, tu vas avoir des erreurs ;)
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
inteloide
Messages : 9
Inscription : 30 janv. 2022, 10:05

Re: Erreur avec openURL : dzVents: Error: (3.1.8) HTTP/1.1 response: 92 ==>> Stream error in the HTTP/2 framing layer

Message par inteloide »

Bonjour Keros,

Merci pour ta réponse.
Je m'étonne tout de même que "openURL" ne fonctionne pas...

J'ai implémenté ta solution, cependant le callBack n'a pas l'air de se faire :
2023-11-12 19:09:00.392 Status: dzVents: Info: ------ Start internal script: Tempo_couleur_jours:, trigger: "every minute"
2023-11-12 19:09:00.392 Status: dzVents: Debug: ExecuteShellCommand: command = curl "https://particulier.edf.fr/services/res ... 2023-11-12"
2023-11-12 19:09:00.392 Status: dzVents: Debug: ExecuteShellCommand: callback = trigger_tempo
2023-11-12 19:09:00.392 Status: dzVents: Debug: ExecuteShellCommand: timeout = nil
2023-11-12 19:09:00.392 Status: dzVents: Debug: ExecuteShellcommand: path = /home/pi/domoticz/scripts/dzVents/data/
2023-11-12 19:09:00.392 Status: dzVents: Info: ------ Finished Tempo_couleur_jours
Je n'ai pas d'autre référence au script Tempo_couleur_jours après...

Pourtant quand j'exécute la commande directement sur le Raspberry Pi :
pi@raspberrypi400:~ $ curl "https://particulier.edf.fr/services/res ... 2023-11-12" {"couleurJourJ":"TEMPO_BLEU","couleurJourJ1":"TEMPO_BLEU"}
pi@raspberrypi400:~ $
Voici mon code (merci pour la remarque sur le nom du callBack) :

Code : Tout sélectionner

return {
    on = {
        timer = {'every minute'},
        httpResponses = { 'trigger_tempo' },
    },

	logging = {
		level = domoticz.LOG_DEBUG, 			                                            -- Décommenter pour afficher les log au niveau Debug
	},

    execute = function(domoticz, item)
        if (item.isTimer) then
            
            --domoticz.openURL({
            --    url = 'https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..domoticz.time.rawDate,
            --    method = 'GET',
            --    callback = 'trigger_tempo',
            --})
            domoticz.executeShellCommand({
                command = 'curl "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='..domoticz.time.rawDate .. '"',
                callback = 'trigger_tempo',
            })
        end
    
        if (item.isHTTPResponse) then
            domoticz.log("trigger_tempo en cours", domoticz.LOG_DEBUG)
            if (item.ok) then
                domoticz.log("Retour : "..item, domoticz.LOG_DEBUG)
            else
                domoticz.log("Item NOK", domoticz.LOG_DEBUG)
            end
        end
    end
}
L'informatique doit être un outil et non une finalité.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Erreur avec openURL : dzVents: Error: (3.1.8) HTTP/1.1 response: 92 ==>> Stream error in the HTTP/2 framing layer

Message par Keros »

Oui pardon, vu qu'on a remplacé par une commande shell, le résultat est un shellCommandResponses et non un httpResponses.

Avec ça, tu devrais avoir la deuxième exécution du script.

Tu risques d'avoir une erreur sur domoticz.log("Retour : "..item, domoticz.LOG_DEBUG) car item est une variable "globale" (je ne pense pas que ce soit le bon terme). Essaye, mais je pense qu'il faudra spécifier item.data
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
inteloide
Messages : 9
Inscription : 30 janv. 2022, 10:05

Re: Erreur avec openURL : dzVents: Error: (3.1.8) HTTP/1.1 response: 92 ==>> Stream error in the HTTP/2 framing layer

Message par inteloide »

Effectivement, il fallait changer :
- "httpResponses = { 'trigger_tempo' }," par "shellCommandResponses = { 'trigger_tempo' },"
- mais aussi : "if (item.isHTTPResponse) then" par "if (item.isShellCommandResponse) then"
- Effectivement le "item" ne pouvait être affiché

Un grand merci pour le coup de main !

Voici le code définitif :

Code : Tout sélectionner

return {
    on = {
        timer = {'every minute'},
        shellCommandResponses = { 'trigger_tempo' },
    },

	logging = {
		level = domoticz.LOG_DEBUG, 			                                            -- Décommenter pour afficher les log au niveau Debug
	},

    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',                                                 -- shellCommandResponses callback
            })
        end
    
        if (item.isShellCommandResponse) then
            if (item.ok) then
                domoticz.log("Couleur jour J : "..item.json.couleurJourJ, domoticz.LOG_DEBUG)
                domoticz.log("Couleur jour J+1 : "..item.json.couleurJourJ1, domoticz.LOG_DEBUG)
            end
        end
    end
}
L'informatique doit être un outil et non une finalité.
YopYop
Messages : 30
Inscription : 23 juil. 2023, 00:37

Re: Erreur avec openURL : dzVents: Error: (3.1.8) HTTP/1.1 response: 92 ==>> Stream error in the HTTP/2 framing layer

Message par YopYop »

Hello,

en refaisant mon vieux script tempo lua en dzevents, je suis tombé sur la même erreur. Je mets la solution ici au cas où.

Il suffit de se faire passer pour un navigateur en indiquant quelques infos dans le header :

Code : Tout sélectionner

	        dz.openURL({
                    url = 'https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='.. os.date("%Y-%m-%d"),
                    method = 'GET',
                    headers = { ['Accept-Encoding'] = 'gzip, deflate, br',
                                ['Accept-Language'] = 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
                                ['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
                                ['Content-Type'] = 'application/json; charset=UTF-8',
                                ['Accept'] = 'application/json, text/javascript, */*; q=0.01'
                        },
                    callback = 'XXXXX'
                    })
Plus d'erreur et on récupére les infos correctement.
Répondre