Page 1 sur 1

dzvents - problème récupération état d'un site ou d'un API web

Posté : 30 juil. 2019, 11:01
par fenris92
Bonjour,

Je tente de récupérer d'état d'un site web et/ou d'une api web via un script Dsvents directement depuis le dashboard domoticz mais je suis confronté à une erreur : Error: dzVents: Error: (2.4.26) There was a problem handling the request alors que le site répond correctement.

Voici le script que j'utilise et qui s'appuie sur l'exemple générique fourni :

Code : Tout sélectionner

return {
	on = {
		timer = {
			'every 10 minutes' -- just an example to trigger the request
		},
		httpResponses = {
			'trigger' -- must match with the callback passed to the openURL command
		}
	},
	execute = function(domoticz, item)

		if (item.isTimer) then
			domoticz.openURL({
				url = 'http://influx:8086/ping',
				method = 'GET',
				callback = 'trigger', -- see httpResponses above.
			})
		end

		if (item.isHTTPResponse and item.ok) then

			if (item.statusCode == 204) then
			    if (domoticz.devices('Status InfluxDB').state == 'Off') then 
					domoticz.devices('Status InfluxDB').switchOn()
					-- domoticz.notify('Service InfluxDB up','InfluxDB disponible',PRIORITY_HIGH)
				end
			else
			    if (domoticz.devices('Status InfluxDB').state == 'On') then
			        domoticz.devices('Status InfluxDB').switchOff()
			        domoticz.notify('Service InfluxDB down','InfluxDB non disponible',PRIORITY_HIGH)
				    domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR)
				    domoticz.log(item, domoticz.LOG_ERROR)
				end
			end

		end

	end
}

J'ai également testé avec une page web pour tester si elle retourne un 200 OK (dans l'exemple précédent c'est un 204) et le résultat est le même avec une erreur au niveau de la log :

Code : Tout sélectionner

2019-07-30 10:40:04.850 Error: dzVents: Error: (2.4.26) There was a problem handling the request
2019-07-30 10:40:04.854 Error: dzVents: Error: (2.4.26) {["headers"]={["Request-Id"]="9ed4bd50-b2a5-11e9-826b-005056b5686a", ["Date"]="Tue, 30 Jul 2019 08:40:01 GMT", ["X-Influxdb-Build"]="OSS", ["X-Influxdb-Version"]="1.7.7", ["X-Request-Id"]="9ed4bd50-b2a5-11e9-826b-005056b5686a", ["Content-Type"]="application/json"}, ["isDevice"]=false, ["_contentType"]="application/json", ["ok"]=true, ["isScene"]=false, ["baseType"]="httpResponse", ["isVariable"]=false, ["data"]="", ["trigger"]="trigger", ["isGroup"]=false, ["statusCode"]=204, ["callback"]="trigger", ["statusText"]="No Content", ["isSecurity"]=false, ["protocol"]="HTTP/1.1", ["isTimer"]=false, ["isHTTPResponse"]=true, ["isJSON"]=false}
Y a t'il une erreur sur mon script ou un soucis au niveau des scripts Dzvents ?

J'utilise la dernière version beta 4.11062

Merci

Re: dzvents - problème récupération état d'un site ou d'un API web

Posté : 30 juil. 2019, 11:13
par boum
À tout hasard, je dirais que c'est dû à la réponse HTTP vide.
dzVents ou domoticz ne doivent pas gérer ce cas correctement. Le serveur répond avec un "Content-Type:application-json", du coup dans les paramètres du trigger, on a ok==true et isJSON==false.
Il faudrait peut-être chercher ou remonter l'information dans le forum officiel.

Essaie avec

Code : Tout sélectionner

/ping?verbose=true
dans l'URL.

Re: dzvents - problème récupération état d'un site ou d'un API web

Posté : 30 juil. 2019, 11:29
par lolo6112
fenris92 a écrit :
30 juil. 2019, 11:01

Code : Tout sélectionner

return {
	on = {
		timer = {
			'every 10 minutes' -- just an example to trigger the request
		},
		httpResponses = {
			'trigger' -- IMPORTANT -> must match with the callback passed to the openURL command
		}
	},
	-> et ça c'est rappelé lors du callback, ce n'est pas exécuté avant ! if (item.isHTTPResponse and item.ok) then

Bonjour,

Comme le script dzVents est appelé depuis l'interface de Domoticz et qu'il y a un trigger qui rappelle le script (callback) après exécution de la commande url, ça m'étonnerait que ça marche un jour.

Donc non, dzVents fonctionne normalement.
Et je ne pense pas qu'on puisse appeler un script qui attend un callback depuis l'interface domoticz.

Re: dzvents - problème récupération état d'un site ou d'un API web

Posté : 30 juil. 2019, 11:40
par fenris92
boum a écrit :
30 juil. 2019, 11:13
À tout hasard, je dirais que c'est dû à la réponse HTTP vide.
dzVents ou domoticz ne doivent pas gérer ce cas correctement. Le serveur répond avec un "Content-Type:application-json", du coup dans les paramètres du trigger, on a ok==true et isJSON==false.
Il faudrait peut-être chercher ou remonter l'information dans le forum officiel.

Essaie avec

Code : Tout sélectionner

/ping?verbose=true
dans l'URL.
J'ai testé mais j'ai toujours une erreur :

Code : Tout sélectionner

Error: dzVents: Error: (2.4.26) There was a problem handling the request
2019-07-30 11:30:00.831 Error: dzVents: Error: (2.4.26) {["baseType"]="httpResponse", ["isGroup"]=false, ["isDevice"]=false, ["isTimer"]=false, ["callback"]="trigger", ["isScene"]=false, ["headers"]={["X-Influxdb-Version"]="1.7.7", ["Content-Type"]="application/json", ["X-Influxdb-Build"]="OSS", ["Date"]="Tue, 30 Jul 2019 09:30:00 GMT", ["X-Request-Id"]="9a3e52de-b2ac-11e9-83d1-005056b5686a", ["Request-Id"]="9a3e52de-b2ac-11e9-83d1-005056b5686a", ["Content-Length"]="19"}, ["isVariable"]=false, ["statusCode"]=200, ["_contentType"]="application/json", ["data"]="{"version":"1.7.7"}", ["isJSON"]=true, ["json"]={["version"]="1.7.7"}, ["trigger"]="trigger", ["isSecurity"]=false, ["ok"]=true, ["isHTTPResponse"]=true, ["statusText"]="OK", ["protocol"]="HTTP/1.1"}

Re: dzvents - problème récupération état d'un site ou d'un API web

Posté : 30 juil. 2019, 11:41
par fenris92
lolo6112 a écrit :
30 juil. 2019, 11:29
fenris92 a écrit :
30 juil. 2019, 11:01

Code : Tout sélectionner

return {
	on = {
		timer = {
			'every 10 minutes' -- just an example to trigger the request
		},
		httpResponses = {
			'trigger' -- IMPORTANT -> must match with the callback passed to the openURL command
		}
	},
	-> et ça c'est rappelé lors du callback, ce n'est pas exécuté avant ! if (item.isHTTPResponse and item.ok) then

Bonjour,

Comme le script dzVents est appelé depuis l'interface de Domoticz et qu'il y a un trigger qui rappelle le script (callback) après exécution de la commande url, ça m'étonnerait que ça marche un jour.

Donc non, dzVents fonctionne normalement.
Et je ne pense pas qu'on puisse appeler un script qui attend un callback depuis l'interface domoticz.
Pourtant c'est l'exemple de script fourni dans l'interface pour le type "HTTP Request" avec Dzvents

Re: dzvents - problème récupération état d'un site ou d'un API web

Posté : 30 juil. 2019, 11:54
par lolo6112
fenris92 a écrit :
30 juil. 2019, 11:01
Pourtant c'est l'exemple de script fourni dans l'interface pour le type "HTTP Request" avec Dzvents
Dont acte, bon courage :mrgreen:

Re: dzvents - problème récupération état d'un site ou d'un API web

Posté : 30 juil. 2019, 14:52
par boum
Le message d'erreur, c'est toi qui l'émet ligne 31 du script :D
Dans le cas avec "verbose", c'est notamment parce que le serveur renvoie 200 et non pas 204.
Il faut vérifier tes conditions dans tes "if/then/else" et leur imbrication correcte.